Отрисовать страницу как сохраненный HTML-файл, используя Rails 3.0? - PullRequest
1 голос
/ 30 июня 2011

Я создаю простое приложение для генерации веб-сайтов в Rails 3.0. Мне бы хотелось, чтобы действие «публикация» в контроллере работало так же, как обычное действие «показ», но вместо этого сохраняет страницу в виде файла HTML в «публичном» каталоге, а не отображает ее в браузере. То есть я хотел бы использовать механизм рендеринга Rails для создания файла вместо предоставления HTTP-ответа.

Какой лучший способ сделать это?

Должен ли я просто добавить caches_page :publish в контроллер?

Или используйте render_to_string и File.new?

Ответы [ 3 ]

3 голосов
/ 01 июля 2011

Вы можете использовать render_to_string метод: http://apidock.com/rails/AbstractController/Rendering/render_to_string

Вы все равно должны ответить от контроллера, хотя.Может быть, перенаправить на страницу, которую вы только что сохранили?

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

Я обнаружил, что кэширование страницы с использованием 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
1 голос
/ 01 июля 2011

Я бы пошел с кэшированием страниц.

Тогда, если у вас есть редактируемый контент, страницы должны генерироваться автоматически.Затем вы могли бы написать системную задачу, которая объединит их в виде веб-сайта.

см. Инструкции (action) /actionpack/lib/action_controller/caching/pages.rb.

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