我有一个关于在Rails项目中设置常量的问题。
从Dan Chak的Enterprise Rails一书中,他解释说,如下面的常量查找代码只在应用程序启动时执行一次。但是,查看日志,我认为每次使用常量时它都会运行。
class Role < ActiveRecord::Base
USER = Role.find_by_key('user')
ADMIN = Role.find_by_key('admin')
end
这绝对允许更清晰的代码,因为我可以做类似的事情:
current_user.role = Role::ADMIN
作为替代方案,我阅读了ActiveSupport::Memoizable
,但我想在更改代码之前确认此设置会导致多个数据库查找。
感谢您的投入!
答案 0 :(得分:5)
每次加载环境时,该代码才会执行一次。这通常会在开发和测试环境中发生,但每次在生产中生成应用服务器时只会发生一次。
答案 1 :(得分:2)
如何将它放在config / initializers / constants.rb中?
确保只在app start上调用一次
刚刚放
USER = Role.find_by_key('user')
ADMIN = Role.find_by_key('admin')
您可以在应用中使用USER / ADMIN常量