2016-12-08 8 views
1

から空のファイルを作成するSEND_DATA。しかし、どのような方法で試しても、ファイルは空白になります。Railsは、私は、文字列で満たされたファイルをダウンロードしようとしているコントローラ

def export(notes) 
    stream = render_to_string(:template=>"cards/export.enex.erb", :locals => {:notes => notes}, :formats => [:enex]) 
    send_data(stream.to_s, :filename => "notes.enex") 
    end 

私は問題を追跡しようとするRails.logger.infoを使用していると、ストリームが空でないことを確認していると(に促さ)私のログショー:ここ

は、関連するコードですファイルが正しいデータで完全に送信されたことを確認します。私はカスタムMIMEタイプ(enex)を使用していますが、それはすべて正しく設定されています。私はいくつかの異なる方法を試してきましたが、何も動作しませんここでいくつかの他の試みている:

各場合において、(1)

@notes = notes 
    render file: "cards/export", formats: [:enex], type: 'text/plain', disposition: 'attatchment; filename=cards.enex' 

(2)

render template: "cards/export", formats: [:enex], :locals => {:notes => notes}, type: 'text/plain', disposition: "attatchment", filename: "notes.enex" 

(3)

send_file 'app/views/cards/export.enex.erb', type: 'application/enex', disposition: "attachment; filename=notecards.enex", :x_sendfile=>true 

、ファイルは空白を終了します。

あなたが見ることができるように、私が使用していた文字列は、ERBのフォームに必要事項を記入して作成されます。重要な場合は、「注釈」はフォームに記入するために使用するハッシュです。私は、コントローラのビューとrespond_toのボタンを使ってこれを動作させる方法を知っていますが、意図的にデータベースを使用しておらず、示されているようにプライベートコントローラメソッドを使用して問題を解決することを好みます。

私はRailsのあなたがSEND_DATAが失敗する原因となるものを見ることができます4

を使用していますか?

答えて

0

send_fileを使用してください。ただし、erbへのパスを与える代わりに、そのテンプレートで生成したファイルへのパスを与え、application/xmlまたはtext/xmlとしてタイプを指定してください。私はenexファイルの経験がありませんが、これは問題を単純化するかもしれないと思います。

file = "my_file.enex" 
File.open(file, "w") do |f| 
    f << render_to_string(:template=>"cards/export.enex.erb", :locals => {:notes => notes}, :formats => [:enex]) 
end 
send_file(file.path, type: "application/xml") 
+0

回答ありがとうございます。私は試してみたが、それはファイルをダウンロードするが、まだ空です。 – JGP

+0

興味深いことに...サーバーのファイルシステムの 'my​​_file.enex'ファイルにコンテンツがありますか? – jlesse

+0

あなたの問題を修正しました。ありがとう! – JGP

関連する問題