0

我一直在尝试编写一个路由表达式,如果 URL 后缀(即 www.example.com/ suffix)对应于我的一个初始化程序中的哈希键,则只会将请求转发到特定控制器(称为 sample_controller). 否则,我希望 Rails 将请求路由到不同的控制器(例如,一个根指的是)。例如,给定一个 hash 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 的情况下实现我的目标?

4

1 回答 1

1

是否有一种解决方法可以使 MyInitializer 可以从 routes.rb 访问?

就在这里。将此行添加到 routes.rb:

require Rails.root.join('config', 'initializers', 'my_initializer.rb')
于 2013-09-01T10:30:07.890 回答