0

config/initializers/下,我有一个 ruby​​ 文件,它将从数据库中加载我的默认汽车”实例的 ID。所以,在我的应用程序启动后,我的应用程序可以直接使用这个默认的汽车 ID。

但是,我需要首先将此默认汽车插入数据库,因此,我需要一个rake(种子)任务或数据库迁移来将默认汽车存储到数据库 Cars 表中。

冲突来了!如果我运行 rake 任务或迁移以将实例插入数据库,初始化程序文件将始终在运行之前首先运行,这意味着“ config/initializers/ ”下的 ruby​​ 文件将获得默认汽车的nil id,因为默认汽车有尚未存储在数据库中。

那么,如何摆脱这种冲突呢?(拥有该初始化程序文件的目的是仅加载默认汽车 ID ONCE 一次)是否有任何其他方法可以仅加载默认汽车 ID 一次?

- - - - - - -编辑 - - - - -

初始化程序下的代码:

default_car=Car.where({:name => DEFAULT_CAR_NAME})
def default_car_id
  return {:default_car_id=>default_car.id}
end
4

1 回答 1

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 配置文件中可能是个好主意,否则我只是硬编码它。

于 2011-03-31T14:28:12.513 回答