2012-10-02 6 views
12

Qual è il modo più rapido ed elegante per contrassegnare il valore dell'opzione attualmente selezionata nel modulo in HAML?Modulo Rails (selezionare/opzione) - come contrassegnare l'opzione selezionata con HAML?

%form{:action => '', :method => 'get'} 
    %select{:name => 'param_name'} 
     %option{:value => 'A'} A data 
     %option{:value => 'B'} B data 

Un modo:

- if params[:param_name] == "A" 
    %option{:value => 'A', :selected => 'selected'} A data 
- else 
    %option{:value => 'A'} A data 

ma questo è inadeguato quando la select scatola volontà ha molti campi di opzione ...

risposta

16

Qualcosa di simile a questo lavoro (utilizzando il vecchio "Sintassi hashrocket" con l'operatore =>)

%select 
    %option{:value => "a", :selected => params[:x] == "a"}= "a" 
    %option{:value => "b", :selected => params[:x] == "b"}= "b" 

Oppure, nel più recente rubino versioni (1.9 e successive):

%select 
    %option{value: "a", selected: params[:x] == "a"}= "a" 
    %option{value: "b", selected: params[:x] == "b"}= "b" 
+1

che cosa fa il selezionati: params [: X]? – jpganz18

+0

il valore selezionato predefinito. il valore per selezionato può essere vero o falso (che il == valuta) – msanjay

13

Si dovrebbe liberare la potenza degli aiutanti di rotaie.

For select tag:

= select_tag :param_name, options_for_select([['A data', 'A'], ['B data', 'B']], params[:param_name]) 

Inoltre, invece di prime %form uso form_tag o meglio form_for quando è possibile (o più meglio simple_form o Formtastic)

+0

Questa risposta è certamente preferibile alla scrittura del markup di forma grezza nelle viste, se si è in grado di utilizzare gli helper del modulo. –

+1

ama la risposta sarebbe più bella se avesse un esempio di avvolgerla in un 'form_tag' o' form_for', la sintassi HAML è piuttosto fastidiosa con la sua indentazione –