Изобразяване на оформление за конкретни действия

Тук имам контролер с 4 действия и искам да приложа оформлението на приложението (оформлението по подразбиране) само към ново действие, или с други думи, искам да изключа само действие за индексиране от оформлението, така че пиша това, но не работи, шаблонът на индекс се изобразява с оформлението.

class SessionsController < ApplicationController

    layout 'application', :except => :index

    def index
    end 

    def new
    end


    def create
        end
    end

    def destroy
    end

end

също опитах

layout 'application', :only => :new

но също не работи, същият проблем, който шаблонът за индекс изобразява с оформление. някакви предложения какъв е проблемът тук?


person Azzurrio    schedule 28.03.2012    source източник


Отговори (2)


Можете да създадете метод за дефиниране на вашето оформление и коригиране на оформлението ви само при ново действие

layout :my_layout

def my_layout
  params[:action] == 'new' ? 'application' : nil
end
person shingara    schedule 28.03.2012
comment
Е, работи!! но имате ли представа защо оформлението 'application', :except =› :index не работи?? между другото по този начин оформлението 'false', :except =› :new също работи - person Azzurrio; 28.03.2012
comment
мисля, че е така, защото в моя случай коригирам оформлението на нула във всички случаи вместо ново действие. Но с използването на :except или :only, това е наследеното оформление, използвано в другия случай. - person shingara; 28.03.2012

Ето кода, който можете да използвате във вашите контролери:

layout :resolve_layout
...
...

private

def resolve_layout
  if %w(index show).include?(action_name)
    "application"
  elsif %w(show).include?(action_name)
    "admin"
  else
    "generic"
end

По принцип третирайте тези масиви като вашите изрази :only за оформление, което им давате, ако се оценяват като верни в сравнение с текущото име на действие.

РЕДАКТИРАНЕ: Забравих да спомена, че това позволява :only, :except и т.н.

person instinctious    schedule 28.03.2012