Как избавиться от этой конфликтной ситуации в моем приложении Rails 3? - PullRequest
0 голосов
/ 31 марта 2011

В config / initializers / у меня есть один файл ruby, который будет загружать идентификатор моего экземпляра" car " по умолчанию из базы данных.Таким образом, после запуска приложения мое приложение может напрямую использовать этот идентификатор автомобиля по умолчанию.

НО , мне нужно сначала вставить этот автомобиль по умолчанию в базу данных,Итак, мне нужна либо задача rake (seed), либо, альтернативно, база данных миграция , чтобы сохранить автомобиль по умолчанию в базе данных Cars.

А вот и КОНФЛИКТ !Если я запускаю задачу rake или миграцию для вставки экземпляра в базу данных, файлы инициализатора будут всегда запускаться FIRSTLY до выполнения чего-либо, что означает файл ruby ​​в разделе " config / initializers/"получит nil идентификатор автомобиля по умолчанию, поскольку автомобиль по умолчанию NOT YET был сохранен в базе данных.

Итак, как избавиться отэтот конфликт?(Цель этого файла инициализатора - загрузить идентификатор автомобиля по умолчанию только ОДИН РАЗ ). Есть ли другой способ загрузить идентификатор автомобиля по умолчанию только один раз?

------------- Редактировать ----------

код под инициализаторами:

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

1 Ответ

0 голосов
/ 31 марта 2011

Я бы так не поступил - это выглядит довольно грязно.Один запрос к базе данных не очень дорогой, поэтому я бы сделал что-то подобное в вашей модели автомобиля:

class Car < ActiveRecord::Base

  def self.default_car
    @default_car ||= Car.where(:name => DEFAULT_CAR_NAME)
    @default_car
  end

end

Возможно, было бы неплохо поместить DEFAULT_CAR_NAME в файл конфигурации yaml, если он будетчтобы меняли вообще, иначе я бы просто прописал это жестко.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...