首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何编写初始化程序,使其只在数据库正确设置时运行?

问如何编写初始化程序,使其只在数据库正确设置时运行?
EN

Stack Overflow用户
提问于 2015-01-02 16:36:19
回答 2查看 721关注 0票数 3

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

代码语言:javascript
复制
config.default_country_id = Spree::Country.find_by(name: 'Netherlands').try(:id)

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

代码语言:javascript
复制
ActiveRecord::StatementInvalid: Mysql2::Error: Table 'revitalised_staging.spree_countries' doesn't exist:...

我应该如何编写这样的初始化程序呢?我是否可以将其包装在某种泛型条件下,除非数据库设置正确,否则可以跳过它吗?我是否应该只在知道需要它时才运行它(例如,白名单一些命令或模式?)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-02 17:00:48

您可以问ActiveRecord该表是否存在,并且只有当它存在时才设置该选项。我想您可以添加某种回退,但由于该值仅用于视图,因此我不会费心。

代码语言:javascript
复制
if ActiveRecord::Base.connection.table_exists? Spree::Country.table_name
  config.default_country_id = Spree::Country.find_by(name: 'Netherlands').try(:id)
end
票数 1
EN

Stack Overflow用户

发布于 2015-01-02 16:53:54

代码语言:javascript
复制
config.default_country_id = Spree::Country.find_by(name: 'Netherlands').try(:id) if defined?(Spree::Country) 

应该做到这一点:-)

参考文献:https://www.ruby-forum.com/topic/171753

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27745352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档