2012-04-05 1 views

risposta

45

Ben,

Dipende da come si sta costruendo le vostre opzioni per selezionare. Se lo fai come il codice qui sotto, passa una stringa nel campo: include blank.

select("post", "person_id", Person.all.collect {|p| [ p.name, p.id ] }, {:include_blank => 'Some text here'}) 

Se stai impostando le opzioni con un options_for_select(), allora si può fare qualcosa di simile al seguente:

options_for_select([["Dollar", "$"], ["Kroner", "DKK"]]) 

Con il valore = "" è il secondo valore nella matrice e il nome che appare nel menu a discesa è il primo. Quindi nel tuo caso, è possibile modificare la seconda risposta a questo aspetto:

options_for_select([["Some text here", ""], ["Dollar", "$"], ["Kroner", "DKK"]]) 
+2

Questo non è stato chiesto, ma se si desidera che l'opzione vuota non essere selezionabile è possibile aggiungere ': include_blank => true, disabled: "", selezionato: "", segnaposto: "Foo Bar" ' – MCB

+0

Georgi ha una risposta migliore, di seguito. invece di 'include_blank', usa' prompt: 'Quale persona?' 'Avrà un valore vuoto, ma il testo visualizzato che fornisci. 'include_blank' accetta solo un valore booleano - non accetta una stringa da visualizzare. –

1

È possibile farlo manualmente aggiungendo ["Your Text", ""] all'inizio dell'array passato a options_for_select, o aggiungere "<option value=\"\">#{h("Your Text"}</option>" all'inizio della stringa passata a select_tag.

31

Invece di

:include_blank => true 

Prova

:include_blank => "your text here" 

se questo è quello che stai cercando.

+2

non proprio, che imposta l'etichetta, non il valore (attributo) – zappan

+0

Anche se non è la risposta alla domanda - è stata la risposta alla mia domanda come volevo impostare l'etichetta vuota - evviva. –

+0

Questo non funzionerà con i metodi 'select_tag', ma funzionerà con i metodi' select'. (E, sì, essi sono diversi). L'uso di una stringa per il valore in include include solo un'opzione vuota senza stringa. Usa 'prompt' in quel caso. –

22

Se si utilizza la funzione select_tag(name, option_tags = nil, options = {}), l'opzione corretta è :prompt => "Some text" piuttosto che impostare un valore stringa per select

+3

Ci ho messo troppo tempo per capire che è diverso per select_tag rispetto a una selezione tradizionale. Grazie. Il tag – zarazan

+0

si comporta in modo molto diverso in tutto il luogo. mi incalza tutto il tempo, pure. – Dudo

+2

Questo è assolutamente corretto e un po 'difficile da capire. 'select_tag' ** accetta ** un'opzione' include_blank' ma NON visualizza il testo che passi come il valore di quell'opzione. Devi usare 'prompt' per quello. Grazie a @Georgi! –