我有一个初始化程序,它希望从数据库中获取一个变量。只有在使用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:...我应该如何编写这样的初始化程序呢?我是否可以将其包装在某种泛型条件下,除非数据库设置正确,否则可以跳过它吗?我是否应该只在知道需要它时才运行它(例如,白名单一些命令或模式?)。
发布于 2015-01-02 17:00:48
您可以问ActiveRecord该表是否存在,并且只有当它存在时才设置该选项。我想您可以添加某种回退,但由于该值仅用于视图,因此我不会费心。
if ActiveRecord::Base.connection.table_exists? Spree::Country.table_name
config.default_country_id = Spree::Country.find_by(name: 'Netherlands').try(:id)
end发布于 2015-01-02 16:53:54
config.default_country_id = Spree::Country.find_by(name: 'Netherlands').try(:id) if defined?(Spree::Country) 应该做到这一点:-)
https://stackoverflow.com/questions/27745352
复制相似问题