2012-12-02 12 views
8

Sto usando una forma semplice nei binari e vorrei sapere se c'è un modo per cambiare il modo in cui vengono visualizzati gli oggetti della collezione. Per esempio io ho qualcosa di simileÈ possibile modificare i nomi visualizzati delle etichette quando si utilizza il formato semplice nei binari?

<%= f.input :lang, :label => "Language", :collection => [ "en", "es, "zh", "fr" ] %> 

Invece di mostrare come "en es zh", ecc Vorrei per mostrare come "Inglese Spagnolo", ecc per l'utente. C'è comunque qualcosa da fare?

Grazie in anticipo.

risposta

12

È possibile utilizzare seguente modo pure:

In Modello:

LANGUAGES = {'English' => 'en','French' => 'fr'} 

In Vista:

<%= f.input :lang, :label => "Language", :collection => Model::LANGUAGES %> 
+0

Grazie per il vostro aiuto! – SlowBucket

0

Immagino che l'etichetta sarà "inglese" e il valore "en"; si può fare qualcosa di simile:

memorizzare i dati in un modello (consigliato) o fare un hash:

@data = Language.all 

Nell'uso vista label_method e value_method:

<%= f.input :lang, :label => "Language", :collection => @data, :label_method => :name, :value_method => :value %> 

Verificare la sezione Collezioni in https://github.com/plataformatec/simple_form

0

Un'altra opzione è quella di aggiungere un aiutante

def languages_display 
    [ 
    ["English", "en"], 
    ["Spanish", "sn"], 
    ["French", "fr"], 
    ] 
end 

E quindi chiamare il vostro aiutante dal campo di input:

<%= f.input :state, :collection => languages_display %> 

E poi sulla vostra vista spettacolo si potrebbe chiamare il seguente aiuto in modo da visualizzare Inglese e non il it Lei ha nel db:

def show_language(language) 
    { 
    "en" => 'English', 
    "sp" => 'Spanish', 
    "fr" => 'French' 
    }[language] 
end 
0

Il mio approccio è quello di mettere intera collezione di file in locale yml (en.yml):

#RAILSROOT/locales/en.yml 
en: 
    collections: 
    languages: 
     - - en 
     - English 
     - - de 
     - Deutch 

e in considerazione solo scrivere:

<%= f.input :lang, :label => "Language", :collection => t("collections.languages") %> 

Io uso questo molto quindi ho anche scritto gioiello con funzioni di supporto che si estende I18n (https://github.com/rstgroup/i18n-structure) e con questo in Gemfile è possibile scrivere (avviso "tc" aiutante)

<%= f.input :lang, :label => "Language", :collection => tc(:languages) %> 
0
<%= f.input :lang, label: "Language", collection: [ [ "English", "en" ], [ "Spanish", "es" ], [ "French", "fr" ] ] %> 

Questo funziona sopra, l'uso una matrice annidata. Inoltre, questo è stato utilizzato nei binari più recenti e in forma semplice.

Problemi correlati