Возможно ли сбросить макет по умолчанию из метода before_filter в Rails 3?
У меня есть следующее как мой contacts_controller.rb :
class ContactsController < ApplicationController
before_filter :admin_required, :only => [:index, :show]
def show
@contact = Contact.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @contact }
end
end
[...]
end
И следующее в моем application_controller.rb
class ApplicationController < ActionController::Base
layout 'usual_layout'
private
def admin_required
if !authorized? # please, ignore it. this is not important
redirect_to[...]
return false
else
layout 'admin' [???] # this is where I would like to define a new layout
return true
end
end
end
Я знаю, что мог бы просто поставить ...
layout 'admin', :only => [:index, :show]
... сразу после "before_filter"в "ContactsController", но, поскольку у меня уже есть куча других контроллеров с многими действиями, должным образом отфильтрованными как необходимые для администратора, было бы намного проще, если бы я мог просто сбросить макет с "normal_layout" на "admin" внутриМетод "admin_required".
Кстати, помещая ...
layout 'admin'
... внутри "admin_required" (как я пытался в коде выше), я получаю неопределенную ошибку методасообщение.Кажется, что он работает только за пределами defs, как я сделал для "normal_layout".
Заранее спасибо.