rails数组混合文本和整数

时间:2016-03-12 08:56:04

标签: ruby-on-rails ruby

使用

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中实现它的正确方法吗?

1 个答案:

答案 0 :(得分:1)

在不了解您的用例和应用程序的情况下,我建议您考虑是否有必要为要存储在数组中的任何数据创建新模型。

这样做的原因是它允许您在has_many和数组之间使用something关系,您可以轻松地创建和测试数组。

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与数组之间的关联,并且以后更容易处理数据({{ 1}}而不是something.my_arrays.first.text)。如果需要,可以使用验证来控制放入阵列的内容。

想一想。