Saya akan menelusuri Rails API docs for collection_select
dan mereka mengerikan sekali.
Judulnya adalah ini:
collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {})
Dan ini adalah satu-satunya kode sampel yang mereka berikan:
collection_select(:post, :author_id, Author.all, :id, :name_with_initial, :prompt => true)
Dapatkah seseorang menjelaskan, menggunakan asosiasi sederhana (katakanlah User
has_many Plans
, dan Plan
milik a User
), apa yang ingin saya gunakan dalam sintaks dan mengapa?
Sunting 1: Juga, akan luar biasa jika Anda menjelaskan cara kerjanya di dalam form_helper
atau bentuk biasa. Bayangkan Anda menjelaskan hal ini kepada pengembang web yang memahami pengembangan web, tetapi 'relatif baru' untuk Rails. Bagaimana Anda menjelaskannya?
sumber
FormBuilder
tetapi diFormOptionsHelper
: api.rubyonrails.org/classes/ActionView/Helpers/…Jawaban:
Atau contoh Anda dapat direpresentasikan sebagai kode berikut:
Ini tidak didokumentasikan di
FormBuilder
, tetapi diFormOptionsHelper
sumber
Saya telah menghabiskan beberapa waktu pada permutasi dari tag pilih sendiri.
collection_select
membangun tag pilih dari kumpulan objek. Ingatlah ini,object
: Nama objek. Ini digunakan untuk menghasilkan nama tag, dan digunakan untuk menghasilkan nilai yang dipilih. Ini bisa berupa objek aktual, atau simbol - dalam kasus terakhir, variabel instance dari nama tersebut dicari dalam pengikatanActionController
(yaitu,:post
mencari instance var yang disebut@post
di controller Anda.)method
: Nama metode. Ini digunakan untuk menghasilkan nama tag .. Dengan kata lain, atribut objek yang Anda coba dapatkan dari pilihcollection
: Koleksi bendavalue_method
: Untuk setiap objek dalam koleksi, metode ini digunakan untuk nilaitext_method
: Untuk setiap objek dalam koleksi, metode ini digunakan untuk teks tampilanParameter opsional:
options
: Opsi yang dapat Anda lewati. Ini didokumentasikan di sini , di bawah Opsi heading.html_options
: Apa pun yang diteruskan di sini, cukup ditambahkan ke tag html yang dihasilkan. Jika Anda ingin menyediakan kelas, id, atau atribut lainnya, ada di sini.Asosiasi Anda dapat ditulis sebagai:
collection_select(:user, :plan_ids, Plan.all, :id, :name, {:prompt => true, :multiple=>true })
Berkenaan dengan penggunaan
form_for
, sekali lagi dalam istilah yang sangat sederhana, untuk semua tag yang datang dalamform_for
, misalnya.f.text_field
, Anda tidak perlu menyediakanobject
parameter pertama ( ). Ini diambil dariform_for
sintaks.sumber