Если я хотел бы использовать макет для определенного действия (скажем, действие show), которое отличается от макета, объявленного в верхней части файла controller.rb, как я могу это сделать? Это должно быть возможно в рельсах, но я не могу найти ничего об этом.
Используйте макет для конкретного действия
Ответ 1
render :layout => 'otherlayout'
Ответ 2
layout 'layout', :only => [:first_action, :second_action]
layout 'second_layout', :only => [:third_action, :fourth_action]
Дон прав, просто зависит от вашего приложения, которое более DRY (или DRY-er?)
ИЗМЕНИТЬ
Мой предыдущий код ошибочен. Вы не можете указать функцию layout
несколько раз. Я нашел это решение онлайн для рендеринга динамического макета:
class OrdersController < BaseController
layout :determine_layout
private
def determine_layout
%w(new).include?(action_name) ? "some_layout" : "public"
end
end
Источник: apidock.com/rails/Actio...
Ответ 3
В следующем примере применяется желаемый макет для конкретного действия, в противном случае он использует макет по умолчанию (layouts/application.html.erb).
class ArticlesController < ApplicationController
layout "article_editor", only: [:new, :edit]
def index
# default layout
end
def new
# article_editor layout
end
def edit
# article_editor layout
end
end