如何在 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
生成的路线
我想根据存储在我的一个模型中的常量生成一些动态路由,但我收到一条错误消息,指示我无法从路由器访问该常量。
这是我的路由器片段:
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