2009-09-01 57 views
13

My Rails 2.3应用程序以HTML/CSS或Word文档生成一个页面。我想将该文件作为静态文件保存到文件系统(即filename.html或filename.doc)。我计划预览操作w /完全呈现的页面和“保存报告”按钮。我们的用户稍后将访问这些静态文件。 (我会保存路径到数据库。)如何将呈现的视图保存为静态文件?

对于如何做到这一点的任何建议?

我尽可能创建一个文件并保存它,但我不知道如何让我的渲染视图。如果有人知道如何将它保存到S3,可以获得奖励积分!非常感谢!

回答

27

render_to_string是你的朋友。你把它放在一个字符串中,用通常的方法将它烧成文件。

class FooController 
    def save_foo_to_disk 
    data = render_to_string(:action => :index) 
    File.open(file_path, "w"){|f| f << data } 
    flash[:notice] = "saved to #{file_path}" 
    end 
end 

至于S3去,看到aws-s3 gem。它似乎在做你以后的事情。用法有点像这样。

AWS::S3::Base.establish_connection!(
    :access_key_id  => 'abc', 
    :secret_access_key => '123' 
) 
S3Object.store(file_name, data, 'bucket-name') 

玩得开心,不要用剪刀跑。

+0

render_to_string !!!这太妙了。在ADwR中隐藏一小段。像魅力一样工作。一旦我完成所有的保存工作,S3就会成为下一个。万分感谢! – antm 2009-09-01 22:16:11

0

另一种方法是将after_action添加到控制器,并在该动作中使用response.body来访问呈现的内容。通过这种方式,您的控制器可以像往常一样响应客户端,同时将呈现的内容保存到数据库中。