Есть ли в Rails переменная, которая соответствует шаблону, который отображается? - PullRequest
1 голос
/ 03 июня 2010

Я могу сделать request.path_parameters ['controller'] и request.path_parameters ['action'], но есть ли что-то вроде request.path_parameters ['template'], чтобы я мог различить, какой файл шаблона (например, index.html) .erb) рендерится?

Я пишу метод, который автоматически устанавливает идентификатор тела для отображаемого шаблона, для легкой манипуляции 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 голосов
/ 03 июня 2010

Если у вас есть разные файлы шаблонов, вы можете использовать content_for в них (см. руководство по макетам и шаблонам ), чтобы установить идентификатор в файле макета, или просто придерживаться params[:action] (должно достаточно - выбор шаблона основан на вызываемом действии).

Вы можете сделать универсальный before_filter для всех (или не всех) действий с помощью

before_filter :set_id_for_body, :only => [...]

def set_id_for_body
  @body_id = params[:action]
end

Всегда думай, как сохранить свой код СУХИМ!


EDIT:

Вы можете определить хеш, который свяжет действия с соответствующими шаблонами:

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

В вашем файле макета просто добавьте

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

EDIT:

Возможно получить доступ к шаблону с помощью метода ActionBase::template, но он не будет работать так, как вы хотели бы. Если вы вызовете метод filename или name в файле макета, вы получите путь к файлу макета, а не к шаблону. AFAIK Невозможно проверить, какой шаблон визуализируется, так как несколько из них могут использоваться для визуализации одного действия.

0 голосов
/ 03 июня 2010
@body_id = params[:action]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...