Как сохранить массив в базе данных в рельсах
если у меня есть такие параметры:
params["scholarship"] = {"name"=>"test", "state_ids"=>["1", "2", "3", "4"]}
и когда я создаю объект в поле базы данных state_id, не сохраняя базу данных?
как сохранить базу данных в формате:
#<Scholarship id: 1, name: "test", state_id: "["1", "2", "3", "4"]">
как это сделать?
спасибо перед
Ответы
Ответ 1
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"] }
Ответ 2
Также вы можете использовать поддержку PostrgreSQL для хранения массива. (Если вы используете PG, конечно).
Ваша миграция будет выглядеть так:
add_column :table_name, :column_name, :string, array: true, default: []
Но не забывайте о проверках.
Ответ 3
В вашей модели есть
serialize :state_ids
Вот ссылка в документации
Сказано, что похоже, что вы пытаетесь передать параметры state_ids и сохранять его в state_id, это то, что вы намереваетесь делать?
Ответ 4
state_ids != state_id
у вас есть 2 разных имени для вашего атрибута, поэтому они не выстраиваются в линию.
затем используйте serialize :state_ids
после переименования столбца.
Однако, если вы сохраняете список state_ids, я собираюсь предположить, что у вас также есть таблица состояний, и поэтому следует изучить has_and_belongs_to_many.