分配关系id以在创建时记录,但不在更新时记录

我有两个模型:页面有很多部分。 我没有使用嵌套资源,因为还有第三个模型。 在我的页面#show中,我有一个链接来创建属于当前页面的新部分:

 @page) %> 

在我的部分视图中,我有以下forms:

  . . . 

params["page_id"] %>

当然,问题是这会将page_id正确传递到新的Section表单中,但是当用户通过编辑路径返回到表单时,params [“page_id”]为空。 我想在创建时设置一次page_id,并且永远不要让它再次被更改(也许有一种方法可以创建一个从表单中删除隐藏字段的条件,或者更清晰的方式?)。

非常感谢你的帮助。

您不希望从params获取page_id ,而是从资源获取。 您可以通过将页面ID分配给控制器中的新资源来完成此操作。

在你的控制器中:

 def new # In reality you might create the new Section differently, # but you get the idea. # # In other scenarios the page_id might come from the parent # (in a nested route) or some other source not determined by # params. @section = Section.new(page_id: params[:page_id]) end 

然后在您的模板中,让page_id自然填充:

 <%= f.hidden_field :page_id %> 

编辑表单已经可以工作,因为记录已经有一个page_id (只要所有部分都有页面ID,我认为它们就是这样)。


旁注:作为一般规则,您希望避免在视图中使用请求参数,因为这是一个混合的关注点(控制器< - >视图)并将导致脆弱性和其他问题(如您所见)。 相反,让控制器进行资源收集并将它们分配给模板变量或者你有什么。