2011-10-18 19 views
6

表のデータをCSVファイルにエクスポートできますが、レコードごとに空白の行があります。なぜ、どのように私はそれを修正するのですか? index.csv.erbrails 3.1 CSVファイルの生成

<%- headers = ["Id", "Name"] -%> 
<%= CSV.generate_line headers %> 
<%- @customers.each do |n| -%> 
<%- row = [ n.id, n.fname ] -%> 
<%= CSV.generate_line row %> 
<%- end -%> 
+1

あなたのコードを試しましたが、うまくいくようです。すべてのレコードの後に​​空白の行はありません。おそらく、n.fnameを調べる必要があるかもしれません。フィールドの内容に新しい行のcharを付けることができます。 –

+0

@MatteoAlessaniデータベースレコードに存在しないようです。どこでも私は見ることができますか?行を生成する前に文字列から新しい行を取り除くことはできますか? – ctilley79

+0

はい、削除するか、フィールドを削除することができます。 –

答えて

6

これはこれを修正したものです。私にとって

<%= CSV.generate_line row, :row_sep => ?\t, :quote_char => ?\ %> 
+0

このエンコーディングについて詳しく知りたいです。なぜ疑問符? – Swards

+0

http://www.tutorialspring.com/ruby/ruby_variables.htm - ASCII文字またはエスケープシーケンスに対応する整数値の前に疑問符を付けると、整数値を取得できます。 – Swards

+0

このメソッドは何らかの理由で各行の最後に余分な '0'を追加します。なぜこれが起こっているかもしれないのか? – mylescc

0

でindex.html.erb

<%= link_to "Export to csv", request.parameters.merge({:format => :csv})%> 

これを試してみてください:

row = [ n.id, n.fname.strip ] 

ストリップは、\ rおよび/または\ nを削除します空白行が発生する可能性があります。私はあなたのソースコードは大丈夫です他のexplainationを持っていない!

2

ストリップとhtml_safeの使用を以下に働いた行が生成された後、適用:

<%- headers = ["Id", "Tour No"] -%> 
<%= CSV.generate_line(headers).strip%> 
<%- @tours.each do |t| -%> 
<%- row = [ t.id,t.tour_no] -%> 
<%= CSV.generate_line(row).html_safe.strip%> 
<%- end -%> 
0

私はこれで苦労されて、私は私の解決策でチップだろうと思いました。

基本的に私のローカルマシン(Mac)ではすべてがうまく動いていました。私はherokuに自分のアプリを配備すると、これらの謎の新しい行を追加し始めました。

私のためのソリューションを使用することでした:

CSV.generate_line(row, row_step: ?\r).html_safe 

注意点として、私はレール4.1.6を使用しています。

6

CSV.generate_lineを苦労していくつかの他の人々を助け

希望は、それが生成する行の末尾に改行文字が追加されますが、まあまあ、あなたは、2つの新しい行を<%= %>を取得しているん。 erb表現出力使用からこの構文を改行文字を抑制するために

<%= -%>

ので:

<%- headers = ["Id", "Name"] -%> 
<%= CSV.generate_line headers -%> 
<%- @customers.each do |n| -%> 
<%- row = [ n.id, n.fname ] -%> 
<%= CSV.generate_line row -%> 
<%- end -%> 

受け入れ答えはerbから生成された新しい行の葉が、新しい行を抑制CSV.generate_lineから私はそれを行う最善の方法ではないと思います。

+0

パーフェクト - ありがとうございました – skwidbreth

+0

これは完璧な答えです。私は最初に.html_safe.stripを使用してこの問題を解決しました。これは、コンマで二重引用符で囲まれた文字列があるまで機能しました。それはすべての私のコラムを台無しにして、この答えに来るまでの解決策としては失われていました。私の唯一の提案は、あなたが必要としないということです - すべての行に、=を持つ行と同じ行になければなりません。どうもありがとうございます! – MTarantini

関連する問題