Html 需要在Rails中更改和缓存出站链接

Html 需要在Rails中更改和缓存出站链接,html,ruby-on-rails,caching,hyperlink,nokogiri,Html,Ruby On Rails,Caching,Hyperlink,Nokogiri,五,。轨道2.3.8 我希望实现的是动态修改Rails中的出站链接,以便使用片段缓存缓存更改。你打算怎么做 注意:这次我有意不在这里包括我自己的想法和源代码,因为我希望听到没有偏见的建议 谢谢。以下是解决方案: 在的ActionController::Caching::Fragments.fragment_中,更改以下行: pos = buffer.length block.call write_fragment(name, buffer[pos..-1], options) 为此: pos

五,。轨道2.3.8

我希望实现的是动态修改Rails中的出站链接,以便使用片段缓存缓存更改。你打算怎么做

注意:这次我有意不在这里包括我自己的想法和源代码,因为我希望听到没有偏见的建议

谢谢。

以下是解决方案:

在的ActionController::Caching::Fragments.fragment_中,更改以下行:

pos = buffer.length
block.call
write_fragment(name, buffer[pos..-1], options)
为此:

pos = buffer.length
fragment = Nokogiri::HTML::fragment(block.call)
fragment.css('a').each do |a|
  unless a['href'].nil?
    a.set_attribute('rel', 'nofollow') unless (a['href'].starts_with?('/') || a['href'].starts_with?("http://#{ENV['BASE_URL']}"))
  end
end
buffer[pos..-1] = fragment.to_html
write_fragment(name, buffer[pos..-1], options)
请注意:

  • 我使用ENV['BASE_URL']存储站点的基本URL(从 数据库(在初始化期间)
  • 你必须安装Nokogiri宝石
  • 此解决方案适用于Rails 2.3.8—我还没有在版本3中进行测试

  • 动态修改出站链接是什么意思?根据不同的url更改链接url?更改出站链接以向其添加rel=“nofollow”。