Подтвердить что ты не робот

Используйте макет для конкретного действия

Если я хотел бы использовать макет для определенного действия (скажем, действие show), которое отличается от макета, объявленного в верхней части файла controller.rb, как я могу это сделать? Это должно быть возможно в рельсах, но я не могу найти ничего об этом.

4b9b3361

Ответ 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