2016-04-11 9 views
0

現在、私は2つのモデル、has_many belongs_to関係でリンクされたレシピと成分を持っています。私のレシピフォームビューでRails常にレシピ - 成分関係にネストフォームを追加

、私は次のコードを持っている:私は試してみて、レシピを編集するたびに、自動的に、しかし

<%= 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" 

のためにすべての成分を再添加する。たとえば、レシピが「Arnold Palmer」と呼ばれていた場合は、レモネードとアイスティーがあり、各成分は一度表示されます。しかし、「編集」ビューに入ると、何も変更しなくても、私がビューに戻ると、レモネードとアイスティーが2回表示されます。編集ビューで成分を読み込まないようにするにはどうすればよいですか?

参照するための表示コード:

<ul> 
<% @recipe.ingredients.each do |x| %> 
<li><%= (x.quantity * @recipe.rating) %> oz <%= x.name %> </li> 
<% end %> 
</ul> 

EDIT:IDのPARAM:追加した後コントローラ。それはもはや重複成分を追加しませんが、私はまだ成分を除去することができません。

def recipe_params 
    params.require(:recipe).permit(:name, :rating, :visible, :instructions, :description, :abv, ingredients_attributes: [ :id, :name, :quantity ]) 
end 

答えて

0

あなたのコントローラーを投稿することができ、私はあなたがあなたの強いパラメータにingredient.idを追加しませんでしたと思います。

idを強パラメータホワイトリストに追加しないと、Railsは既存のものを更新する代わりに新しい成分を追加したいと考えます。

あなたは

def recipe_params 
    params.require(:recipe).permit(ingredients_attributes: [:id, :name]) 
end 
+0

はありがとう:idパラメータに注意し、このようなものを持っている必要があります。これは、同じ成分を読むことの問題を解決しました。しかし、それでも私はレシピから成分を取り除くことができません。 – Spier123456789

+0

http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.htmlに従って、_destroyという名前のフィールド(チェックボックス)とaccepts_nested_attributes_forのallow_destroyオプションを追加する必要があります。 – user894896

関連する問題