如何摆脱我的Rails 3应用程序中的这种冲突情况?

时间:2011-03-31 13:40:57

标签: ruby-on-rails ruby-on-rails-3 rails-migrations

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

1 个答案:

答案 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配置文件中可能是一个好主意,如果它将被更改,否则我只是硬编码。