2014-11-05 16 views
7

Recurly kullanan bir ray uygulaması var. Bir PDF indirmeye ve tarayıcıda oluşturmaya çalışıyorum.Raylar denetleyicisi aracılığıyla alınan tarayıcıda PDF nasıl oluşturulur

link_to 'Download', get_invoice_path(:number => invoice.invoice_number) 

ilişkili kontrolör öylesine benziyor get_invoice yöntemi vardır: Şu anda bir bağlantısı var

def get_invoice 
    begin 
     @pdf = Recurly::Invoice.find(params[:number], :format => 'pdf') 
    rescue Recurly::Resource::NotFound => e 
     flash[:error] = 'Invoice not found.' 
    end 
    end 

ben ikili biçimde benim konsolunda render PDF olsun bağlantıyı tıkladığınızda. PDF'yi tarayıcıda nasıl oluşturabilirim?

+0

Belki de şunu deneyin: http://apidock.com/rails/ActionController/Streaming/send_file –

cevap

8

PDF'nin belleğe kaydedildiğini varsayarak, veri akışını tarayıcıya geri göndermek için send_data'u kullanın. Dosya bir yerlerde saklanır (ancak bu durum görünmüyor)

def get_invoice 
    @pdf = Recurly::Invoice.find(params[:number], :format => 'pdf') 
    send_data @pdf, filename: "#{params[:number]}.pdf", type: :pdf 
end 

ise send_file kullanın.

+0

bu, ancak yine de pdf'nin konsolda ikili biçimde oluşturulmasına neden olur. Bundan kaçınmanın herhangi bir yolu var mı? – Zack

+0

Zack, bu, ortamınızın logger ayarlarına bağlıdır. Geliştirme aşamasında, büyük olasılıkla logger 'info' veya' debug' olarak ayarlanmıştır, bu yüzden konsola bir sürü şey gönderilecektir. Bundan kaçınmanın tek yolu ayarları değiştirmektir. Dürüst olmak gerekirse, çok fazla endişelenmem. –

+0

Awesome! Teşekkürler. :-) – Zack

7

PDF'yi tarayıcıya dönüştüremezseniz, dosya olarak gönderirsiniz. Böyle yapın:

# GET /something/:id[.type] 
def show 
    # .. set @pdf variable 
    respond_to do |format| 
    format.html { # html page } 
    format.pdf do 
     send_file(@pdf, filename: 'my-awesome-pdf.pdf', type: 'application/pdf') 
    end 
    end 
end 

Birden çok formatı desteklemiyorsanız HTML yanıtı gerekmez.

PDF'yi tarayıcıyı bir indirme başlatmak yerine göstermek istiyorsanız, disposition: :inline numaralı telefonu arayarak send_file numaralı telefonu arayın.

İlgili konular