にブロックを与える必要があります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.