2017-04-24 1 views
0

私は多くの成分を持つレシートモデルを持っています。したがって、入れ子になったフォームにはネストされたフィールドにRailsの既存のデータをあらかじめ入力する方法はありますか?

gem "nested_form" 
gem "cocoon" 

を使用します。新しい成分(またはいくつかの成分)を作りながら、すべてがうまくいっています。しかし、編集中にこのフィールドに既存のデータをあらかじめ埋め込んでいます。

_form.html.slim

= f.fields_for :ingredients, [@receipt.ingredients.build] do |i| 
    = render 'ingredient_fields', f: i 
    = link_to_add_association 'Add ingredient', f, :ingredients, class: "btn btn-success" 
    br/ 

_ingredient_fields.html.slim

.nested-fields 
    .row 
    .form-group.col-xs-5 
     .field   
     = f.text_field :name, placeholder: "Name", class: "form-control" 
    .form-group.col-xs-3 
     .field 
     = f.number_field :count, placeholder: "Count", class: "form-control" 
    .form-group.col-xs-3  
     .field 
     = f.select :count_name, [['gr', 'gr'], ['kg', 'kg']], placeholder: "count name", class: "form-control" 
    = link_to_remove_association image_tag("/close.png"), f 

これは、フォームあなたに

def edit 
    @ingredients = @receipt.ingredients 
end 
+0

あなたingredients_controllerを投稿してもらえますか?通常は、編集アクションで '@ingredient = Ingredient.find(params [:id])'を実行します。これで、そのIDに関連付けられたすべての成分と成分_fieldsが見つかりました – ThorTL67

+0

@ ThorTL67編集しましたが、それは領収書コントローラです。 –

答えて

1

レシートコントローラの一部であります書き込む必要があります:

= f.fields_for :ingredients do |i| 

これは、レシートのために既存の成分を繰り返します。あなたはまだ新しい領収書を作成するときに、デフォルトでは、新規成分を追加したい場合は、あなたのreceipts_controllerに次のように、あなたはこの最も簡単な操作を行うことができます。

def new 
    @receipt = Receipt.new 
    @receipt.ingredients.build 
end 
関連する問題