Rails 数组混合文本和整数



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])。如果需要,可以使用验证来控制将哪些内容放入数组中。

想想吧。

最新更新