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

Ruby on rails Rails中是否有一个变量等同于正在呈现的模板?,ruby-on-rails,Ruby On Rails,我可以执行request.path_参数['controller']和request.path_参数['action'],但是否有类似request.path_参数['template']的操作,以便我可以识别正在呈现的模板文件(如index.html.erb) 我正在编写一个方法,自动将主体id设置为正在呈现的模板,以便于css操作: class ApplicationController < ActionController::Base ... after_filter :

我可以执行request.path_参数['controller']和request.path_参数['action'],但是否有类似request.path_参数['template']的操作,以便我可以识别正在呈现的模板文件(如index.html.erb)

我正在编写一个方法,自动将主体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
  ...
class ApplicationController
如果您有不同的模板文件,您可以使用其中的
内容来设置布局文件中的id(签出),或者只需坚持使用
参数[:操作]
(这应该足够了——模板的选择基于调用的操作)

您可以在对所有(或非所有)操作进行筛选之前使用

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
方法访问模板,但它不会按您希望的方式工作。若在布局文件中调用
filename
name
方法,将获得布局文件的路径,而不是模板。AFAIK无法检查正在呈现的模板,因为多个模板可用于呈现单个动作。

问题在于,有时“显示”动作呈现“显示”页面,有时“更新”动作也呈现“显示”页面。我需要一种方法来清楚地将设置为正在呈现的模板的名称(无论操作如何)。谢谢,samuil。但是params[:action]不能很好地工作,因为有时“show”操作会呈现“show”页面,有时“update”操作也会呈现“show”页面。我需要一种方法来明确地将名称设置为正在呈现的模板的名称(无论操作如何)。“content_for”是一种变通方法,可以让我在每个模板文件中显式设置主体id,但需要在我创建的每个模板文件中重复插入该行。我有一个稍微不同的情况,在我的情况下,有两个主题路径添加到模板解析器,根据模板可用性,模板从theme1或theme2中选取,我想知道它在哪里,theme2/theme1
<body id="<%= ActionClasses[params[:action]] %>">