可以routes.rb访问初始化程序的代码吗?

时间:2013-09-01 10:15:39

标签: ruby-on-rails ruby ruby-on-rails-3 routes

我一直试图编写一个路由表达式,只有URL后缀(即www.example.com/suffix)对应于我的一个初始值设定项中的哈希键。否则,我希望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&# 39;错误。

是否存在可以从routes.rb访问MyInitializer的解决方法(比如,从application.rb引用它)?将我的代码放在do / end块之外会解决范围问题吗?或者是否有另一种方法可以实现我的目标,而不会将MyInitializer暴露给routes.rb?

1 个答案:

答案 0 :(得分:1)

是否有可以通过routes.rb访问MyInitializer的解决方法?

是的,有。将此行添加到routes.rb:

require Rails.root.join('config', 'initializers', 'my_initializer.rb')