Rails:如何将路由中的全局变量传递给控制器​​和帮助器?

时间:2014-08-17 20:30:42

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

我有一个处理两个域的Rails应用程序。该应用的设置与this blogpost中所述的相同。根据访问的基本网址,routes.rb确定应触发哪个控制器和哪个操作。

这两个域共享很多文件,例如layouts/application.html.hamllayouts/footer.html.haml等。但在layouts/application.html.haml我需要引用不同的导航文件。通常我会写:

= render "layouts/navigation"

但是我想写多个域名,如下所示:

= render "layouts/#{domain_constraint}/navigation"

... domain_constraint此处取决于路由中匹配的域约束。

那么如何从路由传递此约束,以便稍后我可以使用helpers/application_helper.rb方法和controllers/application_controller.rb方法访问此约束?

1 个答案:

答案 0 :(得分:0)

在您引用的博客文章中......您的控制器和视图中应该可以使用request.domain。这意味着您应该能够键入request.domain请求标头的值来呈现布局。

= render "layouts/#{request.domain}/navigation"

然后,我建议在ApplicationController中创建辅助方法,并将它们标记为helper_method

ApplicationController < ActionController::Base
  helper_method :my_method

  def my_method
    # ... do whatever and access `request.domain` again if you want
  end
end

以这种方式标记为辅助方法的方法将同样适用于控制器和视图。