Визуализировать страницу как сохраненный файл HTML, используя Rails 3.0?
Я создаю простое приложение генератора сайтов в Rails 3.0. Мне бы хотелось, чтобы действие "публикация" в контроллере работало так же, как обычное действие "показ", но вместо этого сохраняет страницу в виде файла HTML в "публичном" каталоге, а не отображает ее в браузере. То есть я хотел бы использовать механизм рендеринга Rails для создания файла вместо предоставления HTTP-ответа.
Какой лучший способ сделать это?
Должен ли я просто добавить caches_page :publish
к контроллеру?
Или использовать render_to_string
а также File.new
?
3 ответа
Я обнаружил, что кэширование страницы с помощью caches_page
не будет работать для меня, потому что нет способа показать уведомление или перенаправить на другую страницу после кэширования страницы. Метод render_to_string
(предложено @Grocery) это путь. Вот пример кода контроллера:
def publish
@article = Article.find(params[:id])
html = render_to_string(:template => "articles/template.html.haml", :layout => 'article' )
FileUtils.makedirs("#{Rails.root}/public/articles/") unless File.exists?("#{Rails.root}/public/articles/")
File.open("#{Rails.root}/public/articles/#{@article.filename}.html", 'w') {|f| f.write(html) }
respond_to do |format|
format.html # publish.html.erb
end
end
Ты можешь использовать render_to_string
Метод: http://apidock.com/rails/AbstractController/Rendering/render_to_string
Вы все еще должны ответить от контроллера, хотя. Может быть, перенаправить на страницу, которую вы только что сохранили?
Я бы пошел с кэшированием страниц.
Тогда, если у вас есть редактируемый контент, страницы должны быть автоматически созданы. Затем вы можете написать системную задачу, которая объединит их в виде веб-сайта.
см. (что угодно)/actionpack/lib/action_controller/caching/pages.rb для получения инструкций.