我有fields_for
表单用于更新,如下所示:
<%= form_for @cuisine, url: {action: "update" } do |f| %>
<%= f.text_area :name %>
<% @cuisine.ingredients.each do |ing| %>
<%= f.fields_for ing do |ingredient_fields|%>
<%= ingredient_fields.text_area :name, :value=> ing.name %>
<%= ingredient_fields.hidden_field :_destroy%>
<%= link_to_remove_fields 'Remove this ingredient', f %>
<% end %>
<% end %>
<% end %>
my cuisines_controller:
def update
@cuisine = Cuisine.find(params[:id])
if @cuisine.update_attributes(cuisine_params)
redirect_to root_path
else
redirect_to edit_cuisine_path
end
end
虽然这样可以正确显示表单(显示填充了@cuisine及其成分&#39; info的表单),但在重新加载页面后,@ cuisine对象会被删除,即使我没有按下提交按钮。
知道发生了什么或如何使用fields_for
更新嵌套属性?
提前致谢。
答案 0 :(得分:1)
首先,您应该像这样使用fields_for
:
<%= f.fields_for :ingredients do |ingredient_fields|%>
<%= ingredient_fields.text_area :name %>
<%= ingredient_fields.hidden_field :_destroy %>
<%= link_to_remove_fields 'Remove this ingredient', f %>
<% end %>
其次,首先应检查控制器cuisine_params
中的permit
是否属于这些属性:
params.require(:cuisine).permit(:name, ingredients_attributes:[:id, :name, :_destroy])
最后,请确保您的模型具有此accepts_nested_attributes_for :ingredients, allow_destroy: true