Вот решение:
В ActionController :: Caching :: Fragments.fragment_for измените эти строки:
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.