Ruby on Rails:bbc代码和性能

时间:2012-04-13 15:32:01

标签: ruby-on-rails bbcode

我在Rails应用程序中使用bb-code进行发布和评论。目前,我有以下内容将帖子的内容放在视图中:

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

将bb-code转换为html并在所有链接中添加“nofollow”的最佳方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:2)

您正在使用的bb-ruby gem允许使用作为参数传递给bbcode_to_html方法的自定义BBCode转换。但是,如果你真的想要所有链接来包含rel="nofollow",我认为你最好的选择是将猴子修补它们本身。基于BBRuby source,您希望这样做:

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转换器以始终包含nofollow属性。我会在config/initializers中添加一个描述性文件名,例如bbruby_nofollow_monkeypatch.rb

对于html_safe,我会保留原样。据我所知,这是一种首选方式,在我看来,它可以保持你的意图。上面的猴子补丁使你视图中的线条更具可读性:

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