我想要一个返回pdf的form_tag。
这是我视图中的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 :(得分:6)
只需添加如下隐藏字段:
<%= hidden_field_tag :format, :pdf %>
有效!
答案 1 :(得分:1)
form_tag
只需要一个正确的路径来提交表单。
由于大多数Rails路由以.:format
结尾,因此您只需将此参数添加到路由帮助程序调用中即可。像:
…_path(format: :pdf)
答案 2 :(得分:0)
最近我使用wicked_pdf gem建立了一个类似的网页。它是一个宝石,可以轻松地将HTML呈现为pdf。 然后你的控制器方法可以作为pdf响应,你可以模仿你想呈现的页面的html,但是它上面有一些wicked_pdf符号。他们有一个非常清晰的教程。