目前我有两个模型,Recipe和Ingredient,它们通过has_many belongs_to关系链接。
在我的食谱表单视图中,我有以下代码:
<%= f.simple_fields_for :ingredients do |ingredient| %>
<%= render 'ingredient_fields', f: ingredient %>
<% end %>
<div class="links">
<%= link_to_add_association 'Add Ingredient', f, :ingredients, class: "btn btn-default add-button" %>
和_ingredient_fields.html.erb
.form-inline.clearfix
.nested-fields
= f.input :name, input_html: {class: "form-input form-control"}
= f.input :quantity, input_html: {class: "form-input form-control"}
= link_to_remove_association 'Remove', f, class: "form-button btn btn-default"
然而,每当我尝试编辑配方时,它会自动重新添加所有成分。例如,如果食谱被称为&#34; Arnold Palmer&#34;成分是柠檬水和冰茶,它会显示每种成分一次。但是,只要我输入&#34;编辑&#34;看来,即使我没有改变任何东西,当我回到视图时,它会两次列出柠檬水和冰茶两次。如何在编辑视图中阻止它读取成分?
参考显示代码:
<ul>
<% @recipe.ingredients.each do |x| %>
<li><%= (x.quantity * @recipe.rating) %> oz <%= x.name %> </li>
<% end %>
</ul>
编辑:添加:id参数后的控制器。它不再添加重复成分,但我仍然无法去除成分。
def recipe_params
params.require(:recipe).permit(:name, :rating, :visible, :instructions, :description, :abv, ingredients_attributes: [ :id, :name, :quantity ])
end
答案 0 :(得分:0)
你可以发布你的控制器吗,我认为你没有将ingredient.id
添加到你的强参数中。
如果你没有将id添加到强参数白名单中,Rails会认为你想添加新的成分而不是更新现有成分。
你应该有类似的东西,请注意:id
参数
def recipe_params
params.require(:recipe).permit(ingredients_attributes: [:id, :name])
end