如何在routes.rb中访问特定于模型的常量

时间:2015-01-24 03:32:37

标签: ruby-on-rails ruby rails-routing

我希望根据存储在我的某个模型中的常量生成一些动态路线,但我收到的错误表明我无法访问来自路由器的常量。

这是我的路由器代码段:

MyShowroom::CATEGORIES.each do |category|
    match "#{category}", :controller => :my_showrooms, :action => :index, :type => category, :as => category
end

这是我得到的错误:

  

NameError:未初始化的常量MyShowroom :: CATEGORIES

基本上,我只需要知道在routes.rb中访问模型常量的正确方法

非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:2)

Arup给了我一个答案,我需要弄清楚如何实现这一点(感谢Arup!),但我只是想给出我自己的答案来展示这是如何完全实施,希望能帮助他人进行。

我在我的模型中定义了枚举常量,因为我想保持逻辑上非常有条理的东西(即枚举与模型直接相关,以便它属于它所属的位置)。为了使应用程序中的常量可用,我在constants.rb中创建了一个app/config/initializers文件,然后我在该文件中创建了一个新常量,它只是指向我已在模型中定义的常量 - 有效地制作我在整个应用程序中可用的模型中定义的常量。

以下是完整实施:

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'
}

constants.rb

MY_SHOWROOM_CATEGORIES = MyShowroom::CATEGORIES

的routes.rb

MY_SHOWROOM_CATEGORIES.each do |key, value|
  action_name = value.tr(' ', '_').downcase
  get "my_showrooms/#{action_name}", to: "my_showrooms##{action_name}"
end

生成的路由

Generated Routes

答案 1 :(得分:1)

您可以在constants.rb目录中创建名为app/config/initializers/的文件。然后你就可以在任何地方使用它们了。然后将模块,类或任何常量放在你想要使用应用程序内任何位置的constants内。