2012-04-24 13 views
11

Ho un array come questo:Rails - cadere giù da un array di stringhe

['New York', 'Los Angeles'] 

E io voglio essere in grado di generare un select/opzione con quei valori in una forma simile a questo:

<%= form_tag filter_city_path, :method=> get do %> 
    <%= select_tag "city", @list_of_cities %> 
<% end %> 

Ma questo non funziona. Come puoi vedere, desidero passare la selezione come nella città nell'URL.

risposta

15

È necessario utilizzare options_for_select helper come

<%= select_tag "city", options_for_select([['New York' ,'New york'], ['Los Angeles', 'Los Angeles']]) %> 
+7

Ogni volta che è possibile, provare e trasformare a livello di codice gli array invece di compilarli a mano. Hai illustrato il motivo per cui non capitalizzando 'york' in seconda istanza. 'cities.collect {| c | [c, c]} 'farebbe il lavoro di espanderlo. – tadman

0

Sembra che l'array non abbia argomenti sufficienti. Si prega di fare riferimento a this guide.

Le opzioni in genere deve essere formattato in questo modo:

[['Lisbon', 1], ['Madrid', 2], ...] 

prendere nota del valore 1, 2, ecc

0

Il mio metodo è creare l'array come costante nel modello, forzare la conferma alle opzioni elencate nella costante e chiamarla da la vista

class Show < ApplicationRecord 

    DAYS = [ "monday", "tuesday", "wednesday", "thursday","friday", "saturday","sunday"] 

    validates :day, inclusion: DAYS 

end 

Se si desidera che l'opzione per il campo da sottoporre senza contenuto dovrete chiamare `allow_blank: true' nella convalida pure. Una volta che è impostato è possibile chiamare la costante per popolare la vista nella forma così:

<%= select_tag "day", options_for_select(Show::DAYS) %> 

o

<%= select_tag "day", options_for_select(Show::DAYS.sort) %> 

se lo vuoi preordinato in (che non ha senso con i giorni della settimana ...)

Problemi correlati