我希望根据存储在我的某个模型中的常量生成一些动态路线,但我收到的错误表明我无法访问来自路由器的常量。
这是我的路由器代码段:
MyShowroom::CATEGORIES.each do |category|
match "#{category}", :controller => :my_showrooms, :action => :index, :type => category, :as => category
end
这是我得到的错误:
NameError:未初始化的常量MyShowroom :: CATEGORIES
基本上,我只需要知道在routes.rb中访问模型常量的正确方法
非常感谢任何帮助。谢谢!
答案 0 :(得分:2)
Arup给了我一个答案,我需要弄清楚如何实现这一点(感谢Arup!),但我只是想给出我自己的答案来展示这是如何完全实施,希望能帮助他人进行。
我在我的模型中定义了枚举常量,因为我想保持逻辑上非常有条理的东西(即枚举与模型直接相关,以便它属于它所属的位置)。为了使应用程序中的常量可用,我在constants.rb
中创建了一个app/config/initializers
文件,然后我在该文件中创建了一个新常量,它只是指向我已在模型中定义的常量 - 有效地制作我在整个应用程序中可用的模型中定义的常量。
以下是完整实施:
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'
}
MY_SHOWROOM_CATEGORIES = MyShowroom::CATEGORIES
MY_SHOWROOM_CATEGORIES.each do |key, value|
action_name = value.tr(' ', '_').downcase
get "my_showrooms/#{action_name}", to: "my_showrooms##{action_name}"
end
答案 1 :(得分:1)
您可以在constants.rb
目录中创建名为app/config/initializers/
的文件。然后你就可以在任何地方使用它们了。然后将模块,类或任何常量放在你想要使用应用程序内任何位置的constants
内。