4

ネストされた属性を使用して複数のモデル オブジェクトを作成できません。私が持っているフォーム.erb:

<%= f.fields_for :comments do |c| %>
  <%= c.text_field :text %>
<% end %>

次のような入力フィールドを生成しています。

<input type="text" name="ad[comments_attributes][0][text]" />
<input type="text" name="ad[comments_attributes][1][text]" />
<input type="text" name="ad[comments_attributes][2][text]" />

私が本当に欲しいのは、次のようになることです。

<input type="text" name="ad[comments_attributes][][text]" />
<input type="text" name="ad[comments_attributes][][text]" />
<input type="text" name="ad[comments_attributes][][text]" />

フォーム ヘルパーを使用して、最初の例のようにハッシュのハッシュを作成する代わりに、2 番目の例のようにフォームにハッシュの配列を作成させるにはどうすればよいでしょうか?

4

1 に答える 1

7

この特定のタイプ要件には text_field_tag を使用できます。この FormTagHelper は、FormHelper のようにテンプレートに割り当てられた Active Record オブジェクトに依存しないフォーム タグを作成するためのいくつかのメソッドを提供します。代わりに、名前と値を手動で指定します。

それらにすべて同じ名前を付けて、次のように最後に [] を追加すると:

 <%= text_field_tag "ad[comments_attributes][][text]" %>
 <%= text_field_tag "ad[comments_attributes][][text]" %>
 <%= text_field_tag "ad[comments_attributes][][text]" %>

コントローラーからこれらにアクセスできます。

comments_attributes = params[:ad][:comments_attributes] # これは配列です

上記の field_tag html 出力は次のようになります。

<input type="text" name="ad[comments_attributes][][text]" />
<input type="text" name="ad[comments_attributes][][text]" />
<input type="text" name="ad[comments_attributes][][text]" />

角かっこの間に値を入力すると、Rails はそれをハッシュとして表示します。

 <%= text_field_tag "ad[comments_attributes][1][text]" %>
 <%= text_field_tag "ad[comments_attributes][2][text]" %>
 <%= text_field_tag "ad[comments_attributes][3][text]" %>

コントローラーによって、キー「1」、「2」、および「3」を持つハッシュとして解釈されます。あなたが必要としていたものを正しく理解していることを願っています。

ありがとう

于 2013-06-06T18:08:16.870 に答える