ruby-on-rails - 如何访问 routes.rb 中的模型特定常量

标签 ruby-on-rails ruby rails-routing

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

这是我的路由器片段:

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

生成的路由

Generated Routes

关于ruby-on-rails - 如何访问 routes.rb 中的模型特定常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28121988/

相关文章:

ruby-on-rails - 为什么在Rails中安装路由会因 “uninitialized constant API”而失败?

ruby-on-rails - RSpec 路由规范 POST 请求问题

ruby-on-rails - 快速帮助重构 Ruby 类

mysql - 通过更新 id 查找或创建

ruby - 使 headless 浏览器停止加载页面

ruby - 在 Vim (Ruby) 中用 do/end 替换匹配的 { braces }

ruby-on-rails - 获取 rails 路由以反射(reflect)数据库列表

ruby-on-rails - 我可以找到所有值,例如[[_bc],​​“a_c”,“ab_”]

ruby-on-rails - admin namespace 中的redirect_to对象

ruby-on-rails - 根据 Rails 中的 has_many 关系计数选择流行模型