Отдельный layout для action в контроллере Ruby on Rails.

В рамках одного контроллера можно использовать несколько layout'ов.

Чаще всего случается, что некоторые экшены в рамках контроллера доступны только админу и соответственно хочется использовать другой лейаут.

Чтобы выбрать нужный layout, удобно использовать case:

class NotesController < ApplicationController
...
  layout :resolve_layout
...
  def resolve_layout
    case action_name
    when "new", "edit"
      "admin"
    else
      "application"
    end
  end
...
end
Концепция проста - создаем метод, который в зависимости от текущего action_name будет отдавать строку с нужным нам контроллером.

В данном примере, создавать и редактировать Note будем в админском лэйауте. Все остальные экшены будут использовать стандартный - application.

Стоит отметить, что резолвить имя лэйаута можно любым удобным способом (например проверять через if соответствие имени action_name со строкой). 
Наверх