我有一个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;“”}
如何将详细信息属性列入白名单?
谢谢
答案 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之前检查参数,并从那里调试视图代码。