2015-07-13 51 views
0

我想有一个form_tag返回pdf。rails 4 form_tag返回pdf格式(大虾)

这是在我看来的form_tag:

<%= form_tag do_some_things_path, method: :get do %> 

    <strong>Start date</strong> 
    <%= text_field_tag 'start_date', nil, id: 'start_date' %> 

    <%= submit_tag 'Do the things' %> 

<% end %> 

这是在我的控制器动作:

def do_some_things 
    @start_date = params[:start_date].to_date 
    @stuff = "123" 
    respond_to do |format| 
    format.html { render :something } 
    format.pdf do 
     pdf = SomeThingsPdf.new(@stuff) 
     send_data pdf.render, filename: Time.zone.today, 
          type: "application/pdf", 
          disposition: "inline" 
    end 
    end 
end 

的输入日期和点击按钮返回美丽的html文件。但那不是我想要的 - 我想要一个PDF!我尝试过format: :pdf(在method: :get之前)和submit标记附近的变体,但没有任何效果。有人可以请指点我正确的方向吗?我非常感谢你的帮助,SO社区!

+0

试试'do_some_things_path(format::pdf)'。我无法分辨这是否有帮助,这是一种猜测,但它背后有一个原因。 –

+0

谢谢D方!工作!似乎do_some_things_path(format::pdf)**不会**工作,但do_some_things_path,格式:: pdf **不会** – setls

+0

D方我很乐意“接受”你的回答是正确的,但它是一个评论不是答案...如果你转移它,我会接受它:) – setls

回答

0

最近我已经用wicked_pdf gem构建了一个类似的网页给你想要的。这是一个很容易将html呈现为pdf的gem。 然后你的控制器方法可以作为PDF格式响应,你可以模仿你想渲染的页面的html,但是有一些wicked_pdf符号。他们有一个非常明确的教程。

+0

然而它并没有解释上面代码中的错误。所以我相信你回答了另外一个问题。 –

+0

我指出了这个解决方案,因为比使用虾简单得多,使用wicked_pdf gem来实现会更快。 –

+0

感谢Diogo的信息,但是我已经有了相当大的Rails项目,我在很多情况下使用了Prawn。因为这个原因,我宁愿坚持与虾。 – setls

1

form_tag,本质上只需要一个正确的路径来提交表单。

由于大部分Rails路由在.:format结束,所以您可以将此参数添加到路由助手调用中。像:

…_path(format: :pdf) 
2

只需添加一个隐藏字段这样的:

<%= hidden_field_tag :format, :pdf %>

它的工作原理!