通过链接在URL上传递的ID无法在创建操作上处理

时间:2015-03-30 23:00:19

标签: ruby-on-rails ruby-on-rails-4

我有一个链接,我希望通过URL传递一个ID,以便在其他模型的操作中处理它,例如new和create。

在_response.html.erb

<%= link_to "Reply", new_subcomment_path(:response_id => response.id), id: "new_subcomment"%>

单击时,它将带我进入新视图,我实际上可以通过上面的链接看到我从_response.html.erb部分传递的参数。即:http://localhost:3000/subcomments/new?response_id=152完全没问题。

new.html.erb

<%= simple_form_for @subcomment do |f| %>
<%= f.input :comment_text, as: :text, input_html: {rows: 1} %>
<%= f.button :submit %>

现在问题是当我点击提交时,我会收到此错误:

  

ActiveRecord :: RecordNotFound(无法找到没有ID的响应):     app / controllers / subcomments_controller.rb:10:在'create&#39;

这是我的subcomments_controller.rb

def new
    @response = Response.find(params[:response_id])
    @subcomments = @response.subcomments.all
    @subcomment = @response.subcomments.new
end

def create
    @response = Response.find(params[:response_id])
    @task = @response.task
    @subcomment = @response.subcomments.new(subcomment_params)
    @subcomment.save

    redirect_to @task 

end

private
def subcomment_params
    params.require(:subcomment).permit(:comment_text)
end

这是我的路线档案:

resources :tasks do
  resources :responses 
end
resources :responses do
  resources :subcomments
end
resources :subcomments

我真的很感兴趣的是我传递的链接和参数的错误,因为它似乎无法在创建操作中处理。 请帮我弄清楚这里的错误&gt;。&lt;

2 个答案:

答案 0 :(得分:0)

您的问题出现在create操作的第一行:@response = Response.find(params[:response_id])。您正在尝试查找带有参数params[:response_id]的记录但上面的回复nil,因此错误Couldn't find Response without an ID

就像你在做Respond.find(nil)一样。检查你的params; respond_id可能不存在或以不同方式嵌套。

答案 1 :(得分:0)

您的表单在response_id无处可去,因此您无法在simple_form_for内添加一行,将其提交给创建操作像:

<%= f.hidden :response_id %>

但请注意:通过执行此操作,用户可以更改此值,我认为这不是您和您的业务逻辑的问题,因为您已经接受response_id操作链接中的new