我有一个模型,其中包含一些最好在模型上存储为序列化哈希值的信息,因为它对大多数应用程序都不重要,因实例而异:
class Foo < AR::Base
attr_accessible :name, :fields
serialize :fields
end
我已经意识到fields
中的一个常见条目实际上与应用相关,并且最好作为属性放置(layout
)。
请注意,理想情况下,我不应该在迁移中引用模型,如何编写迁移以添加layout
字段,并使用当前fields
哈希中的值对其进行初始化?
class AddLayoutToCardTemplates < ActiveRecord::Migration
def change
add_column :card_templates, :layout, :string, default: 'normal'
# Initialise `layout` from `fields['layout']`... how? With raw SQL?
end
end
答案 0 :(得分:1)
您不应该在app文件夹中引用模型。这并不意味着您无法创建本地模型。 :)
class AddLayoutToCardTemplates < ActiveRecord::Migration
class Foo < AR::Base
attr_accessible :name, :fields
serialize :fields
end
def change
add_column :card_templates, :layout, :string, default: 'normal'
Foo.all.each do |f|
f.layout = f.fields.delete(:layout)
f.save
end
end
通过这种方式,您的迁移可以使用ActiveRecord好东西,但保持与时间无关,因为您的app文件夹中的真实模型永远不会被加载。