Получить HTML для страницы - PullRequest
0 голосов
/ 19 июля 2011

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

Редактировать: мне нужны дополнения, которые также отправляются с ответом, таблицы стилей, скрипты и т.д ...

Ответы [ 2 ]

1 голос
/ 19 июля 2011

Вы можете получить HTML с помощью библиотеки NET :: HTTP в Ruby

url = URI.parse('http://www.example.com/index.html')
req = Net::HTTP::Get.new(url.path)
res = Net::HTTP.start(url.host, url.port) {|http|
  http.request(req)
}
body_html = res.body

Затем вы можете сохранить body_html в объекте вашей базы данных.

Уловка в том, что это возвращает HTML, который получит клиент. В «реальном» мире браузер затем анализирует этот HTML, а затем отправляет отдельные HTTP-запросы на получение таблиц стилей, сценариев и изображений. Вам нужно сделать то же самое, а затем сохранить их в отдельных объектах базы данных.

Этот вопрос дает вам несколько инструментов, которые могут помочь с синтаксическим анализом: Способ анализа документа HTML в Ruby?

Слово предупреждения: Я подозреваю, что то, что вы пытаетесь сделать, будет намного сложнее, чем вы думаете. Подумайте о том, чего вы на самом деле пытаетесь достичь, и если это лучший способ для достижения цели.

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

Я надеялся, что мне не придется это делать, так как это кажется немного хакерским, но этого можно добиться, поместив нужный html в партиал, а затем вызвав

render :partial => '/the/partial'

См. Эту ссылкудля более подробной информации:

http://www.justinbritten.com/work/2008/10/rendering-rails-partials-in-a-model-or-background-task/

Редактировать: метод, описанный в ссылке выше, работает только до Rails 3. Для рельсов 3 используйте AbstractController для достижения рендеринга.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...