Używam innego układu dla niektórych akcji (głównie dla nowej akcji w większości kontrolerów).
Zastanawiam się, jaki byłby najlepszy sposób określenia układu? (Używam 3 lub więcej różnych układów w tym samym kontrolerze)
Nie lubię używać
render: layout => 'name'
Lubiłem robić
„nazwa” układu,: only => [: new]
Ale nie mogę tego użyć do określenia 2 lub więcej różnych układów.
Na przykład:
Kiedy wywołuję układ 2 razy w tym samym kontrolerze, z różnymi nazwami układu i różnymi tylko opcjami, pierwsza z nich jest ignorowana - te akcje nie są wyświetlane w określonym przeze mnie układzie.
Uwaga: używam Rails 2.
ruby-on-rails
mrbrdo
źródło
źródło
Odpowiedzi:
Możesz użyć metody, aby ustawić układ.
źródło
layout Proc.new{ ['index', 'new', 'create'].include?(action_name) ? 'some_layout' : 'other_layout' }
Jeśli wybierasz tylko jeden z dwóch układów, możesz użyć
:only
:lub
źródło
(I am using 3 or more different layouts in the same controller)
. Ta odpowiedź pozwala na układ i brak układu, a nie różne układy.Możesz określić układ dla indywidualnej akcji za pomocą respond_to :
źródło
layout "[...]" to the controller class only allows one statement effectively. If you have more than two layouts to deal with (say, admin, generic_app, tailored_app), you will experience
renderowania i / lub przekierowania było wywoływane wiele razy w tej akcji; i nie masz innego wyjścia, jak skorzystać z tej sugestii.format.html { render 'custom_index', layout: 'application' }
w ten sam sposób.Możesz również określić układ akcji za pomocą renderowania:
źródło
Jest na to perełka (layout_by_action) :)
https://github.com/barelyknown/layout_by_action
źródło
Różne sposoby określenia układu pod kontrolerem:
W poniższym kodzie układ application_1 jest wywoływany pod indeksem, a akcja show kontrolera Users, a układ aplikacji (układ domyślny) jest wywoływany dla innych akcji.
W poniższym kodzie układ application_1 jest wywoływany dla wszystkich akcji kontrolera Users.
W poniższym kodzie układ application_1 jest wywoływany tylko dla akcji testowej kontrolerów Users, a dla wszystkich innych akcji układ aplikacji (domyślny).
źródło
Precyzja:
Nie bardzo, ale działający SUCHY sposób jest tym, co widzisz powyżej, ale z precyzją: układ musi być zgodny z twoimi zmiennymi do pracy ("@some"). Tak jak :
I nie :
Jeśli zrobisz przed zadziałaniem ... to też nie zadziała.
Mam nadzieję, że to pomoże.
źródło