我有一个初始化程序,希望从数据库中获取变量。仅在使用rails server或在生产环境中运行应用程序时才需要此初始化,因为它仅在视图中使用。

config.default_country_id = Spree::Country.find_by(name: 'Netherlands').try(:id)


在空白数据库(或任何rake任务)上运行rake db:setup时,该操作失败,因为正在获取值的表不存在(db:setup试图创建它)。

ActiveRecord::StatementInvalid: Mysql2::Error: Table 'revitalised_staging.spree_countries' doesn't exist:...


我应该怎么写这样的初始化器呢?我可以将其包装在某种通用条件下,除非数据库设置正确,否则可以跳过该条件?我应该只在知道需要它时才运行它(即,将一些命令或模式列入白名单吗?)。

最佳答案

您可以询问ActiveRecord表是否存在,并仅在存在时设置选项。我猜您可以添加某种后备功能,但由于该值仅在视图中使用,因此我不会打扰。

if ActiveRecord::Base.connection.table_exists? Spree::Country.table_name
  config.default_country_id = Spree::Country.find_by(name: 'Netherlands').try(:id)
end

关于ruby-on-rails - 如何编写一个初始化程序,使其仅在正确设置数据库后才能运行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27745352/

10-11 01:43