将 Rails 实体渲染为文件
Posted
技术标签:
【中文标题】将 Rails 实体渲染为文件【英文标题】:Rendering Rails entity as file 【发布时间】:2014-09-22 06:13:44 【问题描述】:我遇到了一个在 Rails 中似乎很难解决的问题。
考虑有一个实体Book
包含许多Pages
,并考虑这个Pages
有一个属性text
包含(尽管听起来很奇怪)文本。更准确地说,它是 html 代码,用户在访问pages/some_page_id/show
时通常会看到此文本。相反,当用户转到books/some_book_id/show
时,他们会看到一本书所有页面的“索引”。
现在考虑我想让用户“下载”一本书。这本书将以 zip 格式下载,其中包含每个页面的 HTML 文件。
我对大多数段落都很好,除了一个:当调用BooksController
方法时,设法在文件上渲染Page
。
我实际上想出的是这条线,在BooksController/show
:
def show
if params[:download]
@book.pages.each do |p|
content = render_to_string(:controller => "pages", :action => "show", :page_id => p.id)
File.open(file_name_from_book_name_and_page_number) do |f|
f.write(content)
end
end
end
这会为每个页面生成一个文件...但它的内容是如果在没有任何params[:download]
的情况下调用BooksController/show
,用户将看到的HTML 内容!也就是说,实际调用的不是以页面id为参数的PagesController/show
动作...
我怎样才能做到这一点?
提前谢谢你!
【问题讨论】:
这可能会有所帮助:***.com/questions/14350708/… 【参考方案1】:我不认为 params 哈希被传递给 render_to_string 方法。
试试这个答案How to pass variables to render_to_string?
【讨论】:
以上是关于将 Rails 实体渲染为文件的主要内容,如果未能解决你的问题,请参考以下文章