У меня есть инициализатор, который хочет получить переменную из базы данных. Эта инициализация необходима только при запуске приложения с rails server
или в процессе производства, поскольку она используется только в представлениях.Как написать инициализатор, чтобы он запускался только при правильной настройке базы данных?
config.default_country_id = Spree::Country.find_by(name: 'Netherlands').try(:id)
rake db:setup
При запуске на пустую базу данных (или какие-либо задачах рек) она терпит неудачу, потому что за столом, где значение будучи неправдоподобным не существует (db:setup
пытается создать его).
ActiveRecord::StatementInvalid: Mysql2::Error: Table 'revitalised_staging.spree_countries' doesn't exist:...
Как написать такой инициализатор вместо этого? Могу ли я обернуть его в какое-то общее условие, которое позволяет мне пропустить его, если база данных не настроена правильно? Должен ли я вместо этого запускать его только тогда, когда я знаю, что ему понадобится (т. Е. Белый список нескольких команд или режимов?).
AFAIK, 'defined? (Spree :: Country)' будет возвращать значение "true-ish", если константа определена независимо от того, существует или нет таблица. – berkes