[2.0]Jeden kontroler dwa laye

Mam kod:

layout :admin_lay => :admin def admin_lay(akcje) if akcje.include? action_name 'admin' else 'application' end end
Jednak za każdym razem nie ładuje żadnego laya. Wie ktoś w czym problem?

Hm, czemu dajesz jako parametr hash?

[code=ruby]class Application < ActionController::Base
layout :admin_lay

def admin_lay(actions)
actions.include?(action_name) ? ‘admin’ : ‘application’
end
end[/code]

Potrzebujesz tam lambdy, jeśli korzystasz z niej to ona przyjmuje kontroler jako argument, poza tym skąd bierzesz metodę actions ?

[code=ruby]layout proc{ |controller| controller.actions.include?(controller.action_name) ? “admin” : “application” }

zdefiniuj actions

def actions
%w{akcja1 akcja2}
end[/code]

Ale chodzi mi oto abym mógł w parametrze podać nazwy akcji dla których chcę mieć layout “admin”

layout :admin_lay => ['panel','admin','dodaj','usun','itd']

Ano, ja też gafę strzeliłem. Metoda layoutowa ma nie mieć argumentów.

W api za wiele to nie jest napisane, ale jeśli drugi parametr działa jak np dla before_filter to zrób tak:

[code=ruby]class Application < ActionController::Base
layout :admin_lay, :only => [“admin”, “panel”]

def admin_lay
#kod
end
end[/code]

Chciałem tak zrobić ale jest błąd w ror 2.0. Zamiast standardowego laya nie wybiera żadnego

Błędu nie ma, nie robisz przecież nic niestandardowego. Pokaż kod, bo robisz za pewne coś źle. Btw, metoda “admin_lay” ma zwrócić oczywiście nazwę (string) layoutu, który ma zostać użyty do renderingu.

Normalnie chciałem tak:

layout 'admin', :only => [:panel, :create, :edit, :itd]

Jednak nie renderuje mi laya. Błąd jest już zgłoszony: http://dev.rubyonrails.org/ticket/8867
Więc chciałem zrobić prowizorkę:

layout :admin_lay => ['panel', 'create', 'edit', 'itd'] def admin_lay(akcje) akcje.include? action_name ? 'admin' : 'application' end
Lecz to też nie działa

Jak nie działa tak jakby się chciało to trzeba inaczej:

[code=ruby]class Application < ActionController::Base
layout :admin_lay
ACTIONS = [“admin”, “panel”]

def admin_lay
ACTIONS.include? action_name ? ‘admin’ : ‘application’
end
end[/code]