2012-04-13 4 views
0

投稿とコメントのためにRailsアプリケーションでbbコードを使用しています。現時点では、私は、ビューで投稿の内容を置くために、次のいる:Ruby on Rails:bbcコードとパフォーマンス

<%= @post.content.bbcode_to_html.html_safe.gsub('<a', '<a rel="nofollow"') %> 

HTMLとすべてのリンクに「nofollowを」を追加するために、BB-コードを変換するための最良の方法は何ですか?

ありがとうございます!

答えて

2

使用しているbb-rubyの宝石は、bbcode_to_htmlメソッドにパラメータとして渡されたカスタムBBCode変換を使用できます。しかし、のリンクにrel="nofollow"が含まれていることを本当に欲しいのであれば、あなたの最善の策は、それらが宝石そのものにパッチを当てることです。 BBRuby sourceに基づいて、あなたはこれをしたい:いつものnofollow属性を含めるように

module BBRuby 
    @@tags = @@tags.merge({ 
    'Link' => [ 
     /\[url=(.*?)\](.*?)\[\/url\]/mi, 
     '<a href="\1" rel="nofollow">\2</a>', 
     'Hyperlink to somewhere else', 
     'Maybe try looking on [url=http://google.com]Google[/url]?', 
     :link], 
    'Link (Implied)' => [ 
     /\[url\](.*?)\[\/url\]/mi, 
     '<a href="\1" rel="nofollow">\1</a>', 
     'Hyperlink (implied)', 
     "Maybe try looking on [url]http://google.com[/url]", 
     :link], 
    'Link (Automatic)' => [ 
     /(\A|\s)((https?:\/\/|www\.)[^\s<]+)/, 
     ' <a href="\2" rel="nofollow">\2</a>', 
     'Hyperlink (automatic)', 
     'Maybe try looking on http://www.google.com', 
     :link] 
    }) 
end 

これはBBRubyトランスレータを書き換えます。私はこれをconfig/initializersに入れます。具体的なファイル名はbbruby_nofollow_monkeypatch.rbです。

html_safeについては、そのまま残しておきます。私はそれを理解するのが好ましい方法であり、私の意見ではあなたの意図を明確にしています。上記のサルのパッチは、あなたのビューの行をより読みやすくします:

<%= @post.content.bbcode_to_html.html_safe %> 
+0

それは、ありがとう!私がまだRailsにはまだ新しいので、宝石の猿のパッチングがどのように可能であるか見るのは面白いです。 –

+0

問題はありませんが、手動で奨励金を授与しなければならないことを知っているだけです。http://stackoverflow.com/faq#bounty –