1. ホーム
  2. ruby-on-rails

Ruby on Railsです。フォームで配列を送信する

2023-10-13 19:27:03

質問

配列の属性を持つモデルを持っています。フォームの送信からその属性を入力する適切な方法は何でしょうか?

名前が括弧を含むフィールドを持つフォーム入力が、入力からハッシュを作成することは知っています。これをコントローラで処理して配列に変換すればよいのでしょうか?

抽象度を下げるための例です。

class Article
  serialize :links, Array
end

links変数はURLの配列の形式をとります、つまり [["http://www.google.com"], ["http://stackoverflow.com"]]

フォームで以下のようなものを使用すると、ハッシュが作成されます。

<%= hidden_field_tag "article[links][#{url}]", :track, :value => nil %>

結果のハッシュは次のようになります。

"links" => {"http://www.google.com" => "", "http://stackoverflow.com" => ""}

リンクの名前にurlを含めないと、追加の値がお互いにぶつかり合ってしまいます。

<%= hidden_field_tag "article[links]", :track, :value => url %>

結果はこのようになります。 "links" => "http://stackoverflow.com"

どのように解決するのですか?

html フォームに空の角括弧を含む入力フィールドがある場合、それらはコントローラの params 内の配列に変換されます。

# Eg multiple input fields all with the same name:
<input type="textbox" name="course[track_codes][]" ...>

# will become the Array 
   params["course"]["track_codes"]
# with an element for each of the input fields with the same name

を追加しました。

なお、railsヘルパーは ではなく は自動で魔法のように配列のトリックを行うように設定されていることに注意してください。そのため 名前 属性を手動で作成する必要があります。また、チェックボックスヘルパーはチェックされていないケースを処理するために追加の隠しフィールドを作成するため、railsヘルパーを使用する場合は独自の問題が発生します。