如何处理rails 4中的嵌套表单和强参数

时间:2015-10-13 19:06:14

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

我有一个rails 4应用程序,我尝试填充Post和Detail模型。 模型之间的关系是has_one。 我的PostController我有:

def post_params
  params.require(:post).permit(:title, :email, :tel, :detail_attributes => [:id, :description, :post_id])
end

我的表格是:

<%= f.fields_for @post.detail do |builder| %>
  <%= render "detail_form", detail: builder%>
<% end %>

` 当我检查post_params时,我得到: {“title”=&gt;“”,“email”=&gt;“toto@example.com”,“tel”=&gt;“”}

如何将详细信息属性列入白名单?

谢谢

2 个答案:

答案 0 :(得分:0)

请试试这个

class Post < ActiveRecord::Base
  has_one :detail
  accepts_nested_attributes_for :detail, allow_destroy: true
end

<%= form_for @ost do |f| %>
  <%= f.fields_for :detail do |builder| %>
    <%= render "detail_form", detail: builder%>
  <% end %>
<% end %>

答案 1 :(得分:0)

您的StrongParameters&#39; require / permit代码看起来正确。就像Prashant4224回答的那样,您是否在模型中包含了accepts_nested_attributes_for

class Post < ActiveRecord::Base
  has_one :detail
  accepts_nested_attributes_for :detail
end

旁注:如果您选择添加allow_destroy: true,则需要在控制器的许可行中添加_destroy,如下所示:

def post_params
  params.require(:post).permit(:title, :email, :tel, :detail_attributes => [:id, :description, :post_id, :_destroy])
end

如果您已在模型中接受嵌套参数,则表单可能无法发送这些参数。您应该在调用post_params之前检查参数,并从那里调试视图代码。