【问题标题】:Can routes.rb Access Initializers' code?routes.rb 可以访问 Initializers 的代码吗?
【发布时间】: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


    【解决方案1】:

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

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

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

    【讨论】:

    • 我所希望的最佳解决方法。绝对值得研究可用的 Rails.root.join(...) 选项。谢谢!
    猜你喜欢
    • 2010-09-30
    • 2011-06-19
    • 2018-02-12
    • 2019-04-17
    • 1970-01-01
    • 2012-09-24
    • 2021-12-16
    • 1970-01-01
    • 2020-09-02
    相关资源
    最近更新 更多