2012-04-11 9 views
0

In einer Rails 3.2 App definiere ich den Seitentitel mit <% title "Title Text" %>.Warum wird die eckige Klammernsyntax von Heroku gerendert, aber in der Entwicklung interpretiert?

Dies ist auf die <title> Tag übergeben, wie folgt:

<head> 
    <title>AppName | <%= yield (:title) || "Default Title" %></title> 
</head> 

und wie folgt erteilt: Methode

<h1><%= yield(:title) %></h1> 

durch den folgenden Helfer:

def title(page_title, show_title = true) 
    content_for(:title) { h(page_title.to_s) } 
    @show_title = show_title 
end 

def show_title? 
    @show_title 
end 

Dies funktioniert wie erwartet in der Entwicklung, und arbeitet in den meisten Fällen in der Produktion auf Heroku.

An einigen Stellen habe ich komplexere Titel, z. <% title ["Edit ",(@model.name)] %>.

Dies funktioniert wie erwartet in der Entwicklung und zeigt Edit Foo Bar.

Aber auf Heroku wird dies als ["Edit ", "Foo Bar"] gerendert.

Warum wird die Syntax auf Heroku gerendert? Ich habe das Gefühl, dass dies mit der Verwendung von eckigen Klammern zur Definition eines Arrays zusammenhängen könnte, aber nachdem ich die Heroku-Dokumente und Google durchsucht habe, habe ich keine Informationen darüber gefunden.

Vielen Dank für Anregungen.

Antwort

2

Es klingt, als ob Sie Ruby 1.8 zu Hause verwenden, während Heroku 1.9 - Array#to_s verwendet, gibt unterschiedliche Ergebnisse zwischen den beiden. Um die Mehrdeutigkeit zu vermeiden, sollten Sie explizit angeben, wie Arrays gedruckt werden sollen. Zum Beispiel, wenn Sie Ihren Titel Helfer Arrays behandeln mögen speziell, so etwas wie dies funktionieren soll:

def title (page_title, show_title =true) 
    page_title = page_title.join(' ') if page_title.respond_to? :join 
    base_title = "AppName" 
    @content_for_title = page_title.to_s 
    @show_title - show_title 
    if @content_for_title.nil? 
     base_title 
    else 
     "#{base_title} | #{@content_for_title}" 
    end 
end 
+0

hallo Futter, vielen Dank für Ihren Vorschlag. Ich hatte darüber nachgedacht, aber ich verwende 1.9.2 sowohl in der Produktion als auch in der Entwicklung. Ich habe es versucht, aber leider hat es nicht funktioniert. Ich stoße auf ähnliche Probleme woanders, zB, <% = f.select (: option_column, [['Erste Option', 1], ['Zweite Option', 2], ['Dritte Option', 3]])%> 'erzeugt auch Fehler. Irgendeine Idee, was diese verursachen könnte? –

+0

@AndyHarvey: Was bedeutet "nicht funktioniert"? Wenn Sie dasselbe sehen, dann haben Sie entweder die Änderung nicht korrekt durchgeführt oder Sie beschreiben nicht, was Sie genau machen, weil diese Methode '' ["Edit", "Foo Bar"] '' nicht ausgibt, wenn Sie übergeben Sie es das Array '[" Edit "," Foo Bar "]', – Chuck

+0

danke für die Hilfe bei der Arbeit durch diese. Ich habe deinen Helfer kopiert und in application_helper.rb eingefügt. Die Änderungen wurden definitiv gepusht, zusammen mit mehreren nachfolgenden Pushs. Soweit ich weiß, beschreiben meine Fragen alle Elemente meiner App, die sich auf dieses Problem beziehen. Die bereitgestellte App rendert immer noch '[" Edit "," Foo Bar "]' '. Ich schätze Ihre Hilfe, um dies zu debuggen, da ich nicht sicher bin, wo ich anfangen soll. Danke, –

Verwandte Themen