如何在rails中将数组保存到数据库

时间:2014-04-28 11:45:22

标签: ruby-on-rails arrays params

如果我有这样的参数:

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

当我创建对象到数据库字段state_id时不保存到数据库?

如何使用格式保存到数据库:

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

怎么做?

之前感谢

4 个答案:

答案 0 :(得分:24)

此外,您可以使用PostgreSQL支持数组存储。 (如果你当然使用PG)。 您的迁移将如下所示:

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

但不要忘记验证。

答案 1 :(得分:18)

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 :(得分:2)

在你的模特中有

serialize :state_ids

以下是文档的link

有人说,看起来你正试图传递state_ids参数并将其保存在state_id中,这是你打算做的吗?

答案 3 :(得分:0)

state_ids != state_id

您的属性有两个不同的名称,因此他们不会排队。 然后在重新命名列后使用serialize :state_ids

但是,如果你要存储一个state_id列表,我猜你也有状态表,所以应该考虑使用has_and_belongs_to_many关联。