2016-10-03 72 views
0

我有2个模型,称为教师和请求关联在一起。我想提交属于教师的请求,但在控制台上获得以下错误。有人能帮助我吗?谢谢,无法在Rails中提交表单

Processing by RequestsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"SaLDbXaZOy2cvGILrC9IJ7vInkF0xG42bf84k3IcDj+eFN9lTRfZlkGUMr8s82zQEdO9dgJ3Set935RGH8uv9w==", "request"=>{"name"=>"dsada", "email"=>"dsadas", "phone"=>"sadsadd", "message"=>"sadsa"}, "commit"=>"Create Request"} 
    (0.1ms) begin transaction 
    (0.1ms) rollback transaction 
No template found for RequestsController#create, rendering head :no_content 
Completed 204 No Content in 38ms (ActiveRecord: 0.3ms) 

的申请表

<hr> 
<%= simple_form_for([@request, @instructor.requests.build], :url =>{ :controller =>"requests", 
               :action => "create" }) do |f| %> 
    <%= f.input :name, label: "Your name" %> 
    <%= f.input :email %> 
    <%= f.input :phone, label: "Phone number" %> 
    <%= f.input :message, as: :text %> 
    <br> 
    <%= f.button :submit, class: "btn btn-danger" %> 
<% end %> 
<br> 
<br> 

请求控制器

class RequestsController < ApplicationController 

    def index 
    if params[:search].present? 
     @instructors = Instructor.near(params[:search], 50) 
    else 
     # Shows all listed instructors by the created date. 
     @instructors = Instructor.order('created_at DESC') 
    end 
    end 

    def show 
    @instructor = Instructor.find(params[:id]) 
    end 

    def create 
    @request = Request.new(request_params) 

    if @request.save 
     redirect_to "root" 
    end 
    end 

    private 

    def request_params 
    params.require(:request).permit(:name, :email, :phone, :message) 
    end 
end 

回答

0

你的模型是无效的,所以它不会重定向(因为save回报false)。所以,你需要重写update行动:

def create 
    @request = Request.new(request_params) 

    if @request.save 
    redirect_to "root" 
    else 
    render :new 
    end 
end 

更新:

您使用Rails的5.0,所以如果你声明belongs_to还增加了存在验证外键。所以,你需要创建请求对象是这样的:

@request = Instructor.find(params[:instructor_id]).requests.build(request_params) 
+0

我不知道为什么它返回false ?.还有(0.1ms)开始交易 (0.1ms)回滚事务 – Faisal

+0

我没有看到你的模型,所以不能说它有什么验证。可以猜测,'dsadas'不是有效的电子邮件 – MikDiet

+0

我还没有任何验证!它的唯一(请求)belongs_to:指导员和(指导员)has_many:请求 – Faisal

1

如果您的请求控制器会在教练嵌套你可能是指:

simple_form_for([@instructor, @instructor.requests.build], ... 

此外,它是很常见的这些控制器有:

@instructor = Instructor.find(params[:id]) 
@request = @instructor.requests.new(request_params) 
if @request.save 
    # ... 

删除:url =>{ :controller =>"requests", :action => "create"其冗余,表单生成器应该从[@request, @instructor.requests.build]

如果@request已保存,您将重定向到root_path,但如果请求失败(似乎是这种情况),则不会执行任何操作(在这种情况下,这种情况通常也是render "new")。请参阅指南中的示例控制器:http://guides.rubyonrails.org/action_controller_overview.html#parameters

最终,您可以更改此默认行为,但我建议您从基本入手开始,并在知道它如何工作后进行更改。

+0

我实际上忘记了在教师的指导下缩进请求路线! – Faisal

+0

不知道如何提交此路线? instructor_requests POST /instructors/:instructor_id/requests(.:format)requests#create – Faisal

+0

对于没有发布足够的信息,我感到抱歉。请看github https://github.com/FaisalFehad/instructor_finder – Faisal