Wie passen und ersetzen Sie Templating-Tags in Ruby / Rails?

7

Ich versuche, einem meiner Rails-Modelle eine sehr rudimentäre Beschreibungsvorlage hinzuzufügen. Was ich tun möchte, ist eine Template-Zeichenkette wie folgt:

%Vor%

und ein Hash wie folgt:

%Vor%

und erhalte eine Beschreibung generiert. Ich dachte, ich könnte das mit einem einfachen gsub, aber Ruby 1.8.7 akzeptiert keine Hashes als zweites Argument. Wenn ich eine gsub wie einen Block mache:

%Vor%

Sie können sehen, dass es durch die gesamte Zeichenfolge (mit geschweiften Klammern) ersetzt wird, nicht durch die Match-Captures.

Wie bekomme ich es zu ersetzen "{{etwas}}" mit Vals ["etwas"] (oder Vals ["etwas" .to_sym])?

TIA

    
Callmeed 06.06.2011, 21:59
quelle

2 Antworten

24

Verwenden von Ruby 1.9.2

Der Operator für die Formatierung von Zeichenfolgen % formatiert eine Zeichenfolge mit einem Hashwert als der arg

%Vor%

Verwenden von Ruby 1.8.7

Der String-Formatierungsoperator in Ruby 1.8.7 unterstützt keine Hashes . Stattdessen können Sie dieselben Argumente wie die Lösung von Ruby 1.9.2 verwenden und das String-Objekt patchen. Wenn Sie also Ruby upgraden, müssen Sie Ihre Strings nicht bearbeiten.

%Vor%

Codepad-Beispiel mit dem Standard- und erweiterten Verhalten

    
Christopher Manning 06.06.2011 22:09
quelle
2

Am einfachsten ist es, .to_sym in Ihrem Block zu verwenden:

%Vor%

Aus dem guten Handbuch :

  

In der Blockform wird die aktuelle Match-Zeichenkette als Parameter übergeben, und Variablen wie $ 1, $ 2, $ ', $ & amp; und $ werden entsprechend gesetzt. Der Wert, der vom Block zurückgegeben wird, wird für die Übereinstimmung bei jedem Aufruf ersetzt.

    
mu is too short 06.06.2011 23:04
quelle