Railsでフォームを扱う際には、しばしば複数のデータを同時に送信する必要があります。特に、複数選択可能なデータ(例えば、複数のサービスID)を扱う場合、これを隠しフィールドとして正しく送信する方法が重要です。
問題点
hidden_field
を使用して配列データを送信しようとするとき、単一のフィールドで配列を渡そうとすると問題が生じます。以下のように書いた場合、
<%= form.hidden_field :service_ids, multiple: true, value: @services.map(&:id) %>
このコードは期待した通りには動作せず、配列が文字列として解釈され、結果的には "["3", "20"]"
や"["3 20"]
のような一つの文字列として送信されてしまいます。
解決策
この問題を解決するには、各要素に対して個別の hidden_field
を出力する方法が最も簡単です。具体的には以下のようにします。
<% @services.each do |service| %>
<%= form.hidden_field :service_ids, multiple: true, value: service.id %>
<% end %>
この方法で、service_ids
パラメータは ["3", "20"]
のような形式の配列として正しく送信されます。
まとめ
Railsで複数の値を含むパラメータを隠しフィールドとして扱う場合は、各値に対して個別のフィールドを用意することが重要です。このシンプルなテクニックで、多くの複雑な問題を解決することができます。