私の特定の使用例は、後で実データで置き換えられるプレースホルダ値を持つHTML電子メールテンプレートを構築することです。Nokogiriを使用してHTMLプレースホルダタグを置き換える
例:プレースホルダが交換されたとき
hello <span class='placeholder' data-slug='contact.name'>contact.name</span>
は... "こんにちはジョン" になります。
私はこれらのプレースホルダの50+を持っており、ライブデータでプレースホルダを置き換えるために鋸山を使用しています:
placeholder_mappings = {
"contact.name" => @contact.name,
"contact.email" => @contact.email,
...
}
text = "hello <span class='placeholder' data-slug='contact.name'>contact.name</span>"
page = Nokogiri::HTML(text)
placeholder_mappings.each do |key, value|
page.css("[data-slug='#{key}']").each do |node|
node.replace(value)
end
end
page.to_html
私は、HTMLタグを使用して代わりに{{contact.first_name}}
のようなものだ理由は、私はCSSを追加することができますですテンプレートを作成するときにユーザーが簡単に見ることができるようにします。さもなければ、私はちょうどgsub
を使用して、それを簡単にしたでしょう:)
上記のコードは機能しますが、非効率的です。私はNokogiriのドキュメントを見てきましたが、ノードの構文解析は非常に新しいものです。
これを実装するためのより効果的な方法がありますか、私が気付いていない私の問題のさらに良い解決策がありますか?
私は、使用されたマッピングを参照することだけを考えなかったとは思いません!ほとんどのテンプレートでは10個程度の異なるプレースホルダしか使用されないため、これははるかに効果的です。ノードを削除しないという点に関しては、 'span'タグを残して' class'だけを削除すると、その電子メールクライアントが 'hello 'という生の文字列を件名に表示してしまうという問題があります。 –