2015-07-13 52 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 %>

它的工作原理!