With
def change
create_table :something do |t|
t.text :keyword, array: true, default: []
end
end
我想制作一个类似于 [["a", 1],["b", 5]] 的数据。
它出乎意料地起作用了。 比如,
e.keyword = [["a", 1],["b",2]] => [["a", 1],["b", 2]]。
这是在rails4中实现它的正确方法吗?
在不太了解您的用例和应用程序的情况下,我建议您考虑为要在数组中存储的任何数据创建新模型是否有意义。
这样做的原因是,它将允许您在something
和数组之间使用has_many
关系,并且您可以轻松地单独创建和测试数组。
class MyArray < ActiveRecord::Base
validates :text, presence: true
validates :number, presence: true, numericality: { only_integer: true }
belongs_to :something
end
当然,您可以将验证更改为所需的验证。
class Something < ActiveRecord::Base
has_many :my_arrays
end
同样,扩展类以匹配您的需求。
迁移将如下所示:
def change
create_table :my_arrays do |t|
t.text :text
t.integer :number
t.belongs_to :something
end
end
为数组使用单独的类可以让你使用 Rails 的所有不错的功能来处理something
和数组之间的关联,并且它使以后处理数据更容易(something.my_arrays.first.text
而不是something.text[0][0]
)。如果需要,可以使用验证来控制将哪些内容放入数组中。
想想吧。