Нужно изменить и кэшировать исходящие ссылки в Rails - PullRequest
1 голос
/ 23 июля 2011

v. Рельсы 2.3.8

Я хочу добиться динамического изменения исходящих ссылок в Rails, чтобы изменения кэшировались с использованием фрагментного кэширования. Как бы вы поступили так?

Примечание. На этот раз я намеренно не привожу здесь свои собственные идеи и исходный код, поскольку я хотел бы услышать предложения без предвзятости.

Спасибо.

1 Ответ

0 голосов
/ 26 июля 2011

Вот решение:

В 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)

Обратите внимание:

  1. Я использую ENV ['BASE_URL'] для хранения базового URL сайта (загруженного из базы данных во время инициализации).
  2. У вас должен быть установлен гем Nokogiri.
  3. Это решение работает для Rails 2.3.8 - я не тестировал в версии 3.
...