参数ID随自定义控制器而变化

时间:2016-06-01 05:59:53

标签: ruby-on-rails ruby

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 \ createedit \ update。< / p>

2 个答案:

答案 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

取决于您的数据库设置方式。