Sto esaminando i documenti dell’API di Rails per collection_select
e sono terribili.
L’intestazione è questa:
collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {})
E questo è l’unico codice di esempio che danno:
collection_select(:post, :author_id, Author.all, :id, :name_with_initial, :prompt => true)
Qualcuno può spiegare, usando una semplice associazione (diciamo che un User
molti Plans
e un Plan
appartiene a un User
), cosa voglio usare nella syntax e perché?
Modifica 1: Inoltre, sarebbe fantastico se tu spiegassi come funziona all’interno di un form_helper
o di un modulo regolare. Immagina di spiegarlo a uno sviluppatore web che comprende lo sviluppo web, ma è “relativamente nuovo” per Rails. Come lo spiegheresti?
collection_select( :post, # field namespace :author_id, # field name # result of these two params will be:
Oppure il tuo esempio può essere rappresentato come il seguente codice:
Questo non è documentato in FormBuilder
, ma in FormOptionsHelper
Ho passato un bel po ‘di tempo sulle permutazioni dei tag selezionati io stesso.
collection_select
crea un tag select da una collezione di oggetti. Tenendo presente questo,
object
: nome dell’object. Questo è usato per generare il nome del tag e viene utilizzato per generare il valore selezionato. Questo può essere un object reale o un simbolo – in quest’ultimo caso, la variabile di istanza di quel nome viene cercata nell’associazione di ActionController
(ovvero :post
cerca una @post
istanza chiamata @post
nel controller).
method
: nome del metodo. Questo è usato per generare il nome del tag. In altre parole, l’attributo dell’object che stai cercando di ottenere dalla select
collection
: la collezione di oggetti
value_method
: per ogni object nella raccolta, questo metodo viene utilizzato per il valore
text_method
: per ogni object nella raccolta, questo metodo viene utilizzato per il testo visualizzato
Parametri facoltativi:
options
: opzioni che puoi passare. Questi sono documentati qui , sotto l’intestazione Opzioni.
html_options
: qualunque cosa venga passata qui, viene semplicemente aggiunta al tag html generato. Se vuoi fornire una class, un ID o qualsiasi altro attributo, va qui.
La tua associazione potrebbe essere scritta come:
collection_select(:user, :plan_ids, Plan.all, :id, :name, {:prompt => true, :multiple=>true })
Per quanto riguarda l’utilizzo di form_for
, sempre in termini molto semplici, per tutti i tag che rientrano in form_for
, ad es. f.text_field
, non è necessario fornire il primo parametro ( object
). Questo è preso dalla syntax form_for
.