2012-12-02 10 views
8

Używam prostego formularza w szynach i chciałbym wiedzieć, czy istnieje sposób, aby zmienić sposób wyświetlania obiektów kolekcji. Na przykład mam coś takiegoCzy można zmienić nazwy wyświetlane na etykietach podczas używania prostego formularza w szynach?

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

zamiast pokazywać się jako „en es zh” itp Chciałbym, aby pokazać się jako „angielski hiszpański” etc dla użytkownika. Czy tak jest, żeby robić takie rzeczy?

Z góry dziękuję.

Odpowiedz

12

można użyć także następujący sposób:

W Model:

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

W Widok:

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

Dzięki za pomoc! – SlowBucket

0

Domyślam się, że etykieta będzie "angielski", a wartość "pl"; można zrobić coś takiego:

przechowywania danych w modelu (zalecane) lub dokonać hash:

@data = Language.all 

W wykorzystaniu widoku label_method i value_method:

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

Sprawdź dział Kolekcje w

0

Inną opcją jest dodanie pomocnika

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

a następnie wezwać pomocnika z pola wejściowego:

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

A potem na widoku pokazu można nazwać następujące pomocnika tak, że wyświetla angielsku a nie en masz w dB:

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

Moje podejście jest umieścić całą kolekcję w pliku locale yml (en.yml):

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

iw świetle tylko napisz:

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

Używam tego dużo, więc ja nawet napisał gem z funkcjami pomocniczymi, które rozciąga i18n (https://github.com/rstgroup/i18n-structure) oraz że w gemfile można napisać (zawiadomienie „tc” pomocnik)

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

Działa to powyżej, stosowanie zagnieżdżona tablica. Ponadto zastosowano to w najnowszych szynach i prostej formie.

Powiązane problemy