2012-03-09 11 views
7

Sto lavorando su una semplice applicazione intranet realizzata con Rails 3.1.Rails 3 caselle di selezione a discesa?

Ho un modello per i collegamenti che ha i seguenti campi:

name:string 
url:string 
colour:string 

ho messo attributo in una classe il colore della vista, in questo modo:

<a href="linkaddress" class="<%= link.colour %>">Link Name</a> 

nel momento in il nuovo modulo di collegamento Ho solo un semplice input di form in cui l'utente può digitare qualsiasi cosa e diventerà la classe href come previsto.

Quello che mi piacerebbe fare è creare un elenco a discesa di opzioni preimpostate, queste opzioni sono semplicemente rosso, verde e blu (ad esempio). Dato che sembra abbastanza semplice, non penso che ci sia bisogno di un aiuto.

Ho letto alcune altre domande e risposte su SO e sembrano mostrare esempi in cui si ha il nome seguito da un numero ID. Voglio solo avere il codice qui sotto:

<select name="colour"> 
<option value="red">Red</option> 
<option value="green">Green</option> 
<option value="blue">Blue</option> 
</select> 

Sono sicuro che questo è semplice ma non riesco a capirlo. Ho letto le informazioni sulle API di Rails e select_for_tag mi ha confuso!

risposta

13

Basta usare un elemento di selezione di serie nel modulo per impostare la variabile colore:

<%= f.select :colour, options_for_select([["Red", "red"], ["Green", "green"]], @link.colour) %> 
+0

Perfetto, proprio quello che volevo. Grazie! – dannymcc

4

dove il colore è il nome del modello per i vostri colori e F è l'oggetto form builder:

<%= f.collection_select :colour, Colour.all, :url, :name %> 

Questo sarebbe l'approccio più semplice e diretto per ottenere una select con l'URL del colore come valore e il nome come testo. Se si desidera sia il nome per il valore che il testo, è possibile modificare: url to: name pure.

Inoltre, e per la semantica, si potrebbe anche voler impostare una raccolta @colours nel controller e utilizzarla piuttosto che chiamare il modello dalla propria vista (per sostituire Colour.all).

UPDATE: In base al commento qui sotto e se non si dispone di un modello per la raccolta e volete codificare la vostra selezione e di valori, provare:

<%= select :your_obj, :linkaddress, [["Red","red"],["Green", "green"],["Blue", "blue"]] %> 
+0

Questo è ciò che mi ha confuso. Non sono state impostate selezioni di colore. Voglio codificarli nel modulo. – dannymcc

+0

oh, okay, aggiornerò la risposta. Scusate ho frainteso. – miked

3

Si desidera utilizzare l'helper binari, perché quindi i binari si prenderanno cura di spostare i dati nel tuo modello. quindi molto probabilmente vuoi qualcosa come il seguente.

<%= f.select :colour, ["red","green","blue"] %> 

This Page può essere un po 'prolisso, ma potrebbe aiutare come si sta pensando.

Problemi correlati