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

How to access model-specific constant in routes.rb

我想根据存储在我的一个模型中的常量生成一些动态路由,但我收到一条错误消息,指示我无法从路由器访问该常量。

这是我的路由器片段:

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

这是我遇到的错误:

NameError: uninitialized constant MyShowroom::CATEGORIES

所以基本上,我只需要知道在 routes.rb

中访问模型常量的正确方法

如有任何帮助,我们将不胜感激。谢谢!

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

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

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

生成的路线