1

我正在 Rails 3.0 中构建一个简单的网站生成器应用程序。我想要一个控制器中的“发布”操作,它的工作方式与普通的“显示”操作一样,而是将页面作为 HTML 文件保存在“公共”目录中,而不是在浏览器中显示。也就是说,我想使用 Rails 渲染机制来创建文件,而不是提供 HTTP 响应。

最好的方法是什么?

我应该简单地添加caches_page :publish到控制器吗?

还是使用render_to_stringand File.new

4

3 回答 3

3

您可以使用render_to_string方法:http ://apidock.com/rails/AbstractController/Rendering/render_to_string

不过,您仍然需要从控制器做出响应。也许重定向到您刚刚保存的页面?

于 2011-06-30T20:14:33.940 回答
1

我会使用页面缓存。

然后,如果您有可编辑的内容,则应自动生成页面。然后,您可以编写一个系统任务,将它们捆绑为一个网站。

有关说明,请参见(无论如何)/actionpack/lib/action_controller/caching/pages.rb。

于 2011-06-30T22:58:13.550 回答
1

我发现使用页面缓存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
于 2011-07-02T01:38:29.707 回答