我有一个链接,我希望通过URL传递一个ID,以便在其他模型的操作中处理它,例如new和create。
<%= 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;
答案 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
。