【发布时间】: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动作...
我怎样才能做到这一点?
提前谢谢你!
【问题讨论】:
标签: html ruby-on-rails ruby views rendering