【发布时间】:2013-09-01 10:15:39
【问题描述】:
我一直在尝试编写一个路由表达式,如果 URL 后缀(即 www.example.com/suffix)只会将请求转发到特定控制器(称为 sample_controller)对应于我的一个初始化程序中的哈希键。否则,我希望 Rails 将请求路由到不同的控制器(例如,一个根指的是)。例如,给定一个哈希 RELEVANT_HASH = {"a" => "yada", "b" => "bla"},www.example.com/a 将路由到 sample_controller,而 www.example.com/c 不会,加载 root 的路由反而。
我一直在尝试这样做
match '/:page_name' => 'sample_controller#action', :as => :something, :constraints => lambda { |r| MyInitializer::RELEVANT_HASH.has_key?(r.params[:page_name]) }
在我的 routes.rb 文件中。但是,MyInitializer 在 routes.rb 的 do/end 块中不可用,因为它位于 ActionDispatch::Routing::Mapper 的上下文中,导致 Rails 返回“未初始化的常量 MyInitializer”错误。
是否有一种解决方法可以使 MyInitializer 可以从 routes.rb 访问(例如,从 application.rb 引用它)?将我的代码放在 do/end 块之外会解决范围问题吗?或者是否有另一种方法可以在不将 MyInitializer 暴露给 routes.rb 的情况下实现我的目标?
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 routes