Визуализировать страницу как сохраненный файл 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 для получения инструкций.

Другие вопросы по тегам