Замена ссылок в контенте обработанными ссылками в рельсах с помощью nokogiri - PullRequest
0 голосов
/ 13 декабря 2018

Функция, над которой я сейчас работаю, заключается в замене всех ссылок в контенте обработанными ссылками.Для этого я перебираю все ссылки, используя Nokogiri (https://github.com/sparklemotion/nokogiri). Код ниже

def replace_links(content)

  doc = Nokogiri::HTML(content)
  doc.css("a[href]").each do |link|
    link["href"] =(url_for(
                     controller: "some_controller",
                     action: "some_action",
                     signature: generate_signature))
  end

 content.sub!(content, doc.css('body').inner_html)

end

Это прекрасно работает, когда у меня нет тега <p> в содержании (Пожалуйста, посмотрите наизображение, которое я добавил ниже). Nokogiri оборачивает содержимое тегом

, если у самого содержимого есть страница, значит, обработанный контент будет иметь неожиданный тег ** p **. Как мне поступить в этом случае?

enter image description here

1 Ответ

0 голосов
/ 15 декабря 2018

Вы хотите использовать фрагмент HTML.

Попробуйте это

def replace_links(content) 
  fragment = Nokogiri::HTML.fragment(content)
  doc.css("a[href]").each do |link| 
    link['href'] = ... 
  end
  return fragment.to_html
end

И нет необходимости в этом sub! хак, просто верните fragment.to_html.

...