berus4
February 21, 2008, 5:40pm
1
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?
radarek
February 21, 2008, 7:54pm
2
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]
berus4
February 21, 2008, 8:15pm
4
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']
radarek
February 21, 2008, 10:01pm
5
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]
berus4
February 22, 2008, 2:14pm
6
Chciałem tak zrobić ale jest błąd w ror 2.0. Zamiast standardowego laya nie wybiera żadnego
radarek
February 22, 2008, 5:36pm
7
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.
berus4
February 22, 2008, 7:48pm
8
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
radarek
February 22, 2008, 9:35pm
9
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]