web-dev-qa-db-ja.com

railsでデータベースに配列を保存する方法

このようなパラメータがある場合:

params["scholarship"] = {"name"=>"test", "state_ids"=>["1", "2", "3", "4"]}

また、データベースフィールドにオブジェクトを作成すると、state_idはデータベースに保存されませんか?

形式でデータベースに保存する方法:

#<Scholarship id: 1, name: "test", state_id: "["1", "2", "3", "4"]">

どうやって?

前に感謝します

25
tardjo

ActiveRecord :: Base.serialize

例えば:

class User < ActiveRecord::Base
  serialize :scholarship
end

user = User.create(:scholarship=> { "name" => "test", "state_ids" => ["1", "2"]})
User.find(user.id).scholarship# => { "name" => "test", "state_ids" => ["1", "2"] }
20
Rubyist

また、配列の格納にPostgreSQLサポートを使用できます。 (もちろん、PGを使用している場合)。移行は次のようになります。

add_column :table_name, :column_name, :string, array: true, default: []

しかし、検証について忘れないでください。

29
cnnr

あなたのモデルでは

serialize :state_ids

これがドキュメントへの link です

それはあなたがstate_idsパラメータを渡してstate_idに保存しようとしているように見えると言われていますが、これはあなたがやろうとしていることですか?

2
j-dexx
state_ids != state_id

属性には2つの異なる名前があるので、それらは整列しません。列の名前を変更したら、serialize :state_idsを使用します。

ただし、state_idのリストを保存している場合は、statesテーブルもあると思います。そのため、 has_and_belongs_to_many アソシエーションの使用を検討する必要があります。

0
TomDunning