0

Hashあるタイプのモンゴイドにアクセスしようとしていますfieds_forが、すでにモデルとの関係があり、そのモデルのハッシュにアクセスしたいと考えています。何かのようなもの:

class Leave
  field :leaves_types, :type => Hash
end

class User
  has_many :leaves
end

次のようなことをしたい:

form_for @user do |f|
  f.fields_for :leaves.leave_types...

どうすればこれを達成できますか?前もって感謝します。

4

1 に答える 1

0

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

于 2013-01-29T08:55:42.763 に答える