にブロックを与える必要がありますfields_for
。その方法の詳細については、 docs を参照してください。あなたの場合、まず、次の行をUser
モデルに追加します。
class User
has_many :leaves
accepts_nested_attributes_for :leaves
end
これは、フォームが投稿されたときに、葉のフォーム フィールドからの属性params
が正しく処理されるようにするために必要です。
これで、テンプレートは次のようになります (簡単にするために、ここではLeave
という名前の単純なテキスト フィールドもあると想定していますfoo
)。
<%= form_for @user do |f| %>
...
<%= f.fields_for :leaves do |leave_fields| %>
# Fields for a leave here ----v
Foo: <%= leaves_fields.text_field :foo %>
<% end %>
<% end %>
または、@user.leaves
すでに初期化されていて、フォーム ビルダーにその値をフォーム フィールドに入力させたい場合は、 を反復処理して、それぞれを2 番目の引数として@user.leaves
渡す必要があります。fields_for
<%= form_for @user do |f| %>
...
<% @user.leaves.each do |leave| %>
<%= f.fields_for :leaves, leave do |leave_fields| %>
# Note the addition here --^
Foo: <%= leave_fields.text_field :foo %>
<% end %>
<% end %>
<% end %>
しかし、あなたの質問には別の質問があります。テキストフィールドではなくhashがあり、デフォルトのフォーム入力がありません(つまり、ありませんf.hash_field :leaves_types
)。したがって、 [1]、[2]および[3]の質問で提案されているように、自分で作成することをお勧めします。
とにかく、 Hash フィールドを持つことは私にはかなり珍しいように思われるので、 Hash を何らかの方法で別のhas_many
関連付けに置き換えることができます (確かではありません)。この場合、別のネストされたfields_for
.