我有类似以下的类:第二十二条军规:Rails的数据库迁移不运行时类常量使数据库调用
class FruitKinds < ActiveRecord::Base
Apple = FruitKinds.find(:all).find { |fk|
fk.fruit_name == :apple.to_s
}
# ... other fruits
# no methods
end
苹果等水果的具体通常用作默认值在其他地方我应用程序,所以我想用一种方便的方式以可枚举的,静态的方式来引用它们。
但是,有一个问题。有一个数据库迁移来创建FruitKinds
表,并使用Apple
之类的特殊Fruits
进行填充。当数据库迁移运行初始化FruitKinds时,rake
无法启动,因为它首先加载FruitKinds
,然后调用数据库,这当然会失败,因为FruitKinds表尚不存在。
解决方法是在迁移运行时将FruitKinds :: *字段注释掉,但这太可怕了。什么是最好的方法来做到这一点?
难道你不能写自我。苹果,使它最多击中数据库一次?您可以将该值保存到某个字段并具有attr_accessor。 – 2009-08-03 21:33:11