Rails fields_for更新不起作用(删除父对象)



我有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 %>

我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及其成分信息的表单),但在重新加载页面后,即使我不按提交按钮,@cuisine对象也会被删除。

知道发生了什么或如何使用fields_for更新嵌套属性吗?

提前谢谢。

首先,您应该像这样使用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

最新更新