Saya menggunakan tata letak yang berbeda untuk beberapa tindakan (kebanyakan untuk tindakan baru di sebagian besar pengontrol).
Saya bertanya-tanya apa cara terbaik untuk menentukan tata letak? (Saya menggunakan 3 atau lebih layout yang berbeda di controller yang sama)
Saya tidak suka menggunakan
render: layout => 'name'
Saya suka melakukannya
tata letak 'nama',: hanya => [: baru]
Tapi saya tidak bisa menggunakannya untuk menentukan 2 atau lebih layout yang berbeda.
Sebagai contoh:
Ketika saya memanggil tata letak 2 kali dalam pengontrol yang sama, dengan nama tata letak yang berbeda dan hanya opsi yang berbeda, yang pertama diabaikan - tindakan tersebut tidak ditampilkan dalam tata letak yang saya tentukan.
Catatan: Saya menggunakan Rails 2.
ruby-on-rails
mrbrdo
sumber
sumber
Jawaban:
Anda dapat menggunakan metode untuk mengatur tata letak.
sumber
layout Proc.new{ ['index', 'new', 'create'].include?(action_name) ? 'some_layout' : 'other_layout' }
Jika Anda hanya memilih di antara dua tata letak, Anda dapat menggunakan
:only
:atau
sumber
(I am using 3 or more different layouts in the same controller)
. Jawaban ini memungkinkan tata letak dan tanpa tata letak, bukan tata letak yang berbeda.Anda dapat menentukan tata letak untuk tindakan individual menggunakan respond_to :
sumber
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
Render dan / atau redirect disebut beberapa kali dalam kesalahan action` ini; dan Anda tidak punya pilihan selain menggunakan saran ini.format.html { render 'custom_index', layout: 'application' }
dengan cara yang sama.Anda juga dapat menentukan tata letak untuk tindakan menggunakan render:
sumber
Ada permata (layout_by_action) untuk itu :)
https://github.com/barelyknown/layout_by_action
sumber
Berbagai cara untuk menentukan tata letak di bawah pengontrol:
Dalam kode berikut, tata letak application_1 disebut di bawah indeks dan menunjukkan tindakan pengontrol Pengguna dan tata letak aplikasi (tata letak default) dipanggil untuk tindakan lain.
Dalam kode berikut, tata letak application_1 dipanggil untuk semua tindakan pengontrol Pengguna.
Dalam kode berikut, tata letak application_1 dipanggil untuk tindakan uji pengontrol Pengguna saja dan untuk semua tata letak aplikasi tindakan lainnya (default) disebut.
sumber
Presisi:
Cara KERING yang tidak benar-benar berfungsi adalah apa yang Anda lihat di atas, tetapi dengan presisi: tata letak harus sesuai dengan variabel Anda untuk bekerja ("@beberapa"). Sebagai :
Dan tidak :
Jika Anda melakukan before_action ... itu tidak akan berfungsi juga.
Semoga ini bisa membantu.
sumber