2016-04-12 21 views
1

私のコントローラでは、文字列の配列を作成しています。私は単純に新しい行に配列の各要素を持つCSVを作成したいと思います。すでにコンマで区切られた文字列です。Rails 4アプリケーションで文字列の配列からCSVを生成

私は私のコントローラで、このコードでCSVファイルを作成しようとしてきた

#controller 
@metrics = ["Group Name,1", "25", "44,2,5"] 
respond_to do |format| 
    format.html 
    format.csv { send_data @metrics.to_csv, filename: "output.csv" } 
end 

そして、私のモデルでは、このコード:

#model 
def self.to_csv(options = {}) 
    CSV.generate(options) do |csv| 
    all.each do |row| 
     csv << row.attributes.values 
    end 
    end 
end 

しかし、これは私のCSVファイルへの出力をラインを分離することなく。

"Group Name,1", "25", "44,2,5" 

私が見てみたいと思います出力は単純です:これを正しく処理する方法の

"Group Name,1" 
"25" 
"44,2,5" 

任意の考え?前もって感謝します。

+0

あなたが望む出力が何であるかはっきりしていません。あなたの質問にその出力を追加して、ここで何を作ろうとしているのかはっきりしていますか? – smathy

+0

出力にいくつかの説明が追加されました –

+1

これはCSVではなく、各行に二重引用符で囲まれた個々の文字列を持つファイルです。 – smathy

答えて

3

@metricsは配列なので、モデルコードに実際に何もしないように、モデル上にコードを呼び出すようには見えません。

このコードお使いのコントローラは、あなたが探しているの出力を生成します。

CSV.generate do |csv| 
    @metrics.each { |item| csv << [item] } 
end 
+0

はい、それが問題でした。お手伝いありがとう! –

0

これは単なる推測ですが、配列の配列として@metricsをフォーマットしてみてください。そう@metricsの各要素は、独自の配列です。 to_csvは配列のように行を扱うので、新しい行を生成するためには配列の配列が必要です。もう一度あなたのコードを見てみると

[["Group Name,1"], ["25"], ["44,2,5"]] 

UPDATE

@modelは、すべてのモデルのインスタンスではありません。それは単なる配列です。 to_csvを呼び出すと、モデルで参照されているメソッドが読み取られません。私はルビーのArrayオブジェクトに組み込まれていると推定されているto_csvメソッドが呼び出されて焼いていると何かエラーが発生していない理由を説明しています。 @Anthony Eは正しく彼の答えでこれを言った。 (私の答えはうまくいくと思うが)。

+0

ええ、それは私の最初の前提でした。それはうまくいくはずですが、内部配列を処理せず、文字列をエスケープしようとします: '\" [\ "\" \ "\"、\ "、\" two \ "\"] \ "、\" [\ "\" three \ "\"] \ "\ n" –

関連する問題