将 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 实体渲染为文件的主要内容,如果未能解决你的问题,请参考以下文章

Rails slim 将 html 渲染为文本

将rails多态关联对象渲染为JSON

将 Rails 渲染格式限制为 html 的方法

将 Rails 部分渲染到图像

Rails 渲染头与状态

Ruby on Rails 在带有静态脚本文件的视图中渲染