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
Der Operator für die Formatierung von Zeichenfolgen %
formatiert eine Zeichenfolge mit einem Hashwert als der arg
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% Am einfachsten ist es, .to_sym
in Ihrem Block zu verwenden:
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.
Tags und Links ruby ruby-on-rails regex templates