27341


entry has_many users な関係で、以下のような params を構築するには view をどのように書いたらいいでしょうか?

`{entry: { user_ids: [1, 2] }}`

尚、以下の記述だと `{ user_ids: [1, 2] }` となってしまいます。まぁ、これでもいいのですが、、、、

[code]

    <%= form_for @entry, url: update_users_entry_path do |f| %>
      <% @entry.users.each do |user| %>
        <%= number_field_tag "user_ids[]", user.id %>
      <% end %>
    <% end %>
    
[/code]

要は以下の html が作りたいのです。

[code]

    <input id="entry_user_ids_1" type="text" name="entry[user_ids][]" value="1">
    <input id="entry_user_ids_2" type="text" name="entry[user_ids][]" value="2">
    
[/code]


CC BY-SA 3.0
2016-07-04T09:05:11.790
27325
2016-07-05T02:00:42.463
7208
question
ruby-on-rails
Entry#user_ids を更新する view の書き方を教えて下さい


以下のようにすれば、`{"entry" => {"user_ids" => [...]}}` の形式で渡されます。

[code]

    <% f.object.users.each_with_index do |user, index| %>
      <%= number_field_tag "entry[user_ids][]", user.id, :id => "entry_user_ids_#{index}" %>
    <% end %>
    
[/code]

レールに乗るのであれば、`fields_for` を利用する方法もあります。この場合、`{"entry" =>
{"entry_user_mappings_attributes" => {"0" => {"id" => ..., "user_id" => ...},
"1" => {"id" => ..., "user_id" => ...}}}}` の形で渡されますが、そのまま update
にパラメータとして与えることで更新できます。(`entry_user_mappings` は中間テーブル名です。適宜置き換えてください。)

[code]

    <%= f.fields_for :entry_user_mappings do |ff| %>
      <%= ff.number_field :user_id %>
    <% end %>
    
[/code]

※strong parameters の対応 (`entry_params` を変更)
を忘れずに。(後者は`accepts_nested_attributes_for` の設定も)


CC BY-SA 3.0
2016-07-05T02:00:42.463
27341
2016-07-05T02:00:42.463
76
27325
answer