我想根据存储在我的一个模型中的常量生成一些动态路由,但我收到一条错误消息,指示我无法从路由器访问该常量。
这是我的路由器片段:
MyShowroom::CATEGORIES.each do |category|
match "#{category}", :controller => :my_showrooms, :action => :index, :type => category, :as => category
end
这是我遇到的错误:
NameError: uninitialized constant MyShowroom::CATEGORIES
所以基本上,我只需要知道在 routes.rb 中访问模型常量的正确方法
任何帮助将不胜感激。谢谢!
最佳答案
Arup 给了我我需要的答案,我需要弄清楚如何实现它(感谢 Arup!),但我只是想给出我自己的答案来展示这是如何完全实现的,希望能帮助其他人出。
我在我的模型中保留了我的枚举常量定义,因为我想让事情非常有逻辑地组织起来(即枚举与模型直接相关,所以这就是它所属的地方)。为了使常量在整个应用程序中可用,我在 app/config/initializers
中创建了一个 constants.rb
文件,然后我在该文件中创建了一个新常量,它只是指向我已经在我的模型中定义的常量 - 有效地使在我的模型中定义的常量在整个应用程序中可用。
这里是完整的实现:
my_showroom.rb(模型)
CATEGORIES = {
1 => 'Opinions Please',
2 => 'Budget Minded',
3 => 'Getting Started',
4 => 'Ever Evolving',
5 => 'Done for Now',
6 => 'All Out Assault',
7 => 'Home Theater',
8 => 'Secondary Rigs'
}
常量.rb
MY_SHOWROOM_CATEGORIES = MyShowroom::CATEGORIES
路线.rb
MY_SHOWROOM_CATEGORIES.each do |key, value|
action_name = value.tr(' ', '_').downcase
get "my_showrooms/#{action_name}", to: "my_showrooms##{action_name}"
end
生成的路由
关于ruby-on-rails - 如何访问 routes.rb 中的模型特定常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28121988/