2016-06-23 11 views
0

Ich muss einen Helfer machen, der mehrere Werte in Bezug auf einen Benutzer nimmt und sie übersetzt und sie als eine Zeichenfolge an meine Sicht zurückgibt.Helfer, um mehrere Werte zu übersetzen

ich über so etwas wie dies dachte:

im Helfer:

def interests(user) 
    @all_interests = user.interests 
    @all_interests.each_with_index do |interest| 
    t('user.#{interest}') + ", " 
    if index == @all_interests.size - 1 
     t('user.#{interest}') + "." 
    end 
    end 

Nach Ansicht:

<p> My interests are: <%= interests(@user) %> </p> 

Das gewünschte Ergebnis wäre zum Beispiel:

Meine Interessen sind: Technik, Sport, Gartenarbeit.

Aber in diesem Moment gibt es eine Reihe wie folgt vor:

Meine Interessen sind: [ "Engineering", "Sport", "Garten"]

Edit: Alle Werte werden korrekt in meine i18n-Datei übersetzt.

Antwort

2

Sie sollten die Ergebnisse Karte und verbinden sie mit einem ‚‘ in Ihrem Fall:

def interests(user) 
    user.interests.map {|interest| t("user.#{interest}") }.join(', ') 
end 

BTW, gibt es keine Notwendigkeit, eine Instanzvariable zu setzen. Die Hilfsmethode gibt das Ergebnis bereits zurück.

+0

Danke, dies scheint mir einen Schritt voraus zu bekommen, obwohl, es tut immer noch den richtigen zu passieren scheint Wert für die Übersetzung # {Interest}

+2

Doppelzitate sollten für die String-Interpolation zu arbeiten verwendet werden – Vasfed

+1

Ich habe vergessen zu erwähnen, aber Bitte nimm ein lo OK bei der '.to_sentence' Methode, können Sie den Konnektor spezifizieren und ihn menschlicher lesbar und übersetzbar machen. Zum Beispiel: '% w (abc) .to_sentence # => a, b und c' – Leito

1

Bessere Nutzung Array Karte + beitreten:

def interests(user) 
    user.interests.map{|i| t("user.#{i}")}.join(', ') 
end 

Und im Blick:

<p> My interests are: <%= interests(@user) %>. </p> 
Verwandte Themen