2017-09-06 4 views
0

Ich möchte nur eine einfache machen jede Schleife in meinem Middleman Helfer, sind Daten in meinem page'Frontmatter wie folgt gespeichert:Middleman Inhaltsübersicht YAML Liste

dir: 
    - test 
    - test2 

Also in meinem Helfer, ich versuche, meine Schleife zu schreiben :

def translate_directory 
    current_page.data.dir.each do |dir| 
    dir 
    end 
end 

meine Methode in meiner Seite rufen
<%= translate_directory %> 

und das ist, was Anzeige ist:

["test", "test2"] 

Aber jetzt, wenn ich die gleiche Schleife in meine Seite zu machen, schreiben Sie mit ERB Syntax:

<% current_page.data.dir.each do |x| %> 
    <%= x %> 
<% end %> 

der Ausfahrt ist die folgende

test test2 

in zwei getrennt Saiten, also genau das, was ich will.


EDIT:, wenn ich die helper'method puts es die beiden Strings in zwei Linien, so in zwei getrennten Strings angezeigt werden soll. Verstehe nicht, warum es als ein Array in meinem Browser erscheint.


EDIT 2: etwas, was ich vergessen, ich will mit I18n.translate jedes Wort übersetzen, wie folgt aus:

def path_translate 
    current_page.data.dir.each { |dir| t("paths.#{dir}", locale: lang) } 
end 

, aber ich kann nicht, weil die jede Methode doesn‘ t arbeiten, damit I18n nicht jedes Wort übersetzen kann.

Antwort

0

Mein schlechtes. Verwenden Sie .map anstelle von .each, um das Problem zu beheben, und verwenden Sie .join, um das Array zu einer großen Zeichenfolge zu machen.

1

Da Ihr Helfer ein Array zurückgibt, wird keine interpolierte Zeichenfolge wie die ERB-Vorlage ausgeführt. Versuchen Sie Folgendes für Ihren Helfer:

def translate_directory 
    current_page.data.dir.join(' ') 
end 
+0

Danke, ich habe vergessen zu präzisieren, warum ich mehrere Saiten wollte. Ich habe es einfach hinzugefügt (2). Also Join-Methode, um eine große Zeichenfolge zu bekommen, funktioniert nicht mehr. –