在 config / initializers / 下,我有一个ruby文件,从数据库中加载默认“ car ”实例的ID。因此,在我的应用程序启动后,我的应用程序可以直接使用此默认车辆ID。
但是,我需要首先将此默认汽车插入数据库,因此,我需要 rake (种子)任务或者替代数据库迁移,用于将默认汽车存储到数据库Cars表。
CONFLICT 来了!如果我运行rake任务或迁移以将实例插入数据库,初始化文件将始终在运行任何内容之前运行首先,这意味着“ config下的ruby文件/ initializers / “将获得默认汽车的零 ID,因为默认汽车已将 NOT YET 存储在数据库中。
那么,如何摆脱这场冲突呢? (初始化程序文件的目的是加载默认车辆ID 仅ONCE )是否有其他方法只加载默认车辆ID一次?
------------- ----------编辑
初始化程序下的代码:
default_car=Car.where({:name => DEFAULT_CAR_NAME})
def default_car_id
return {:default_car_id=>default_car.id}
end
答案 0 :(得分:0)
我不会这样做 - 看起来很混乱。单个数据库查询不是很昂贵,所以我在你的Car模型中做了类似的事情:
class Car < ActiveRecord::Base
def self.default_car
@default_car ||= Car.where(:name => DEFAULT_CAR_NAME)
@default_car
end
end
将DEFAULT_CAR_NAME置于yaml配置文件中可能是一个好主意,如果它将被更改,否则我只是硬编码。