当form_for
如此:
<%= form_for @reservation, remote: true do |f| %>
我得到以下参数:
参数:{“utf8”=&gt;“✓”,“reservation”=&gt; {“party_size”=&gt;“1”, “persons_attributes”=&gt; {“0”=&gt; {“first_name”=&gt;“大名”, “last_name”=&gt;“test”,“meal_id”=&gt;“1”,“id”=&gt;“24”}, “1”=&gt; {“first_name”=&gt;“”,“last_name”=&gt;“”,“meal_id”=&gt;“1”}}, “address”=&gt;“test”,“city”=&gt;“Test”,“state”=&gt;“te”,“zip”=&gt;“te”}, “commit”=&gt;“submit”,“id”=&gt;“24”}
但是当我将自定义控制器放到form_for
上时,就像这样
<%= form_for @reservation, url: {controller: 'static_pages'}, remote: true do |f| %>
我得到以下参数:
参数:{“utf8”=&gt;“✓”,“reservation”=&gt; {“party_size”=&gt;“1”, “persons_attributes”=&gt; {“0”=&gt; {“first_name”=&gt;“大名”, “last_name”=&gt;“test”,“meal_id”=&gt;“1”,“id”=&gt;“24”}, “1”=&gt; {“first_name”=&gt;“”,“last_name”=&gt;“”,“meal_id”=&gt;“1”}}, “address”=&gt;“test”,“city”=&gt;“Test”,“state”=&gt;“te”,“zip”=&gt;“te”}, “commit”=&gt;“submit”,“id”=&gt;“index”}
如何确保params[:id]
保持不变?我需要的是标准form_for
,其中调用了不同的控制器(同样用于new
\ create
和edit
\ update
。< / p>
答案 0 :(得分:0)
'form_for'尝试从对象中识别URL。如果它有ID,则使用更新路由,否则使用创建路由。最初它将其标识为
/预订/ 1
但是当您明确传递某些内容时,它会覆盖它。现在我们的URL看起来像
/预订/索引
我建议查看'form_for'文档,但真正解决问题的方法是显式传递整个URL,而不仅仅是控制器。这样你就可以在正确的地方获得ID
答案 1 :(得分:0)
在表单中,您可以放置以下代码行,这些代码将在POST请求中将:id传递给控制器。
<%= hidden_field_tag(:id, params[:id]) %>
您可能必须添加一个方法将其转换为控制器中的整数。
params[:id].to_i
取决于您的数据库设置方式。