Rails中是否有一个变量等同于正在呈现的模板?

时间:2010-06-03 05:30:46

标签: ruby-on-rails

我可以执行request.path_parameters ['controller']和request.path_parameters ['action'],但是有什么像request.path_parameters ['template'],所以我可以辨别哪个模板文件(例如index.html) .erb)正在呈现?

我正在编写一个方法,自动将body ID设置为正在渲染的模板,以便于css操作:

  class ApplicationController < ActionController::Base
  ...
  after_filter :define_body_selector
  ...
  def define_body_selector
    # sets @body_id to the name of the template that will be rendered
    # ie. if users/index.html.erb was just rendered, @body_id gets set to "index"
    @body_id = ???
  end
  ...

2 个答案:

答案 0 :(得分:0)

@body_id = params[:action]

答案 1 :(得分:0)

如果您有不同的模板文件,可以在其中使用content_for(请查看guide about layouts and templates)在布局文件中设置ID,或者只是坚持params[:action](这应该足够了 - - 模板的选择基于所谓的动作。

您可以使用

对所有(或非全部)操作进行通用before_filter
before_filter :set_id_for_body, :only => [...]

def set_id_for_body
  @body_id = params[:action]
end

始终考虑如何保持代码干净!


修改

您可以定义将操作与匹配模板链接的哈希:

ActionClasses = { 
  :update => "show",
  :show   => "show,
  :new    => "new",
  :edit   => "new",
  ... 
}

在您的布局文件中添加

<body id="<%= ActionClasses[params[:action]] %>">

修改

可以通过ActionBase::template方法访问模板,但它不会按照您希望的方式工作。如果您在布局文件中调用filenamename方法,您将获得布局文件的路径,而不是模板。 AFAIK无法检查正在渲染的模板,因为可以使用多个模板来渲染单个动作。