2017-10-01 7 views
2

モデルのすべてのフィールドをCSVファイルに書き出すことができましたが、オリジナルとhas_manyの関係を持つ別のモデルの属性を追加する必要があります。複数のモデルからCSVにデータをエクスポートする

それが正常に動作しますが、趣味は学生が多くの趣味を持っているとして、学生とhas_manyの関係を持つ別のテーブルですので、私が欲しいstudent.rb

def self.as_csv 
    attributes = %w{surname given_name admission_year admission_no hobbies } 
    CSV.generate do |csv| 
    csv << attributes 
    all.each do |item| 
     csv << item.attributes.values_at(*attributes) 
    end 
    end 

respond_to do |format| 
    format.html 
    format.csv { send_data @students.as_csv, filename: "students-#{Date.today}.csv" } 
end 

ように私のコントローラファイルを探しますcsvでカンマ区切りのリストとして各生徒に趣味を表示します。私はこれを達成する方法について立ち往生しています。

ご協力いただければ幸いです。あなたは文字列として趣味を返し、属性名とtitleを調整する必要があります

CSV_HEADER = %w[surname given_name admission_year admission_no hobbies] 
def self.as_csv 
    CSV.generate do |csv| 
    csv << CSV_HEADER 
    all.each do |student| 
     csv << [ 
     student.surname, 
     student.given_name, 
     student.admission_year, 
     student.admission_no, 
     student.hobbies.pluck(:title).join(', ') 
     ] 
    end 
    end 
end 

+0

使用しているRailsのバージョンは? '' as_csv'メソッドの 'all'とjoin(:hobbies)を使って動作するかどうか試しましたか? – Surya

+0

私は試みましたが、それは動作していないようです。 – Anukrity

+0

私は何かが欠けていますか? 'as_csv'は' class'メソッドか 'instance'メソッドですか? – rony36

答えて

2

は、私はちょうどこのような何かをするだろう。

+0

これは機能します。今度はすべてのレコードを保存する代わりに、レコードのサブセットを反復処理する必要があります。このフィルタリングはすでにコントローラで行われており、 "@ students.as_csv"と言うと、send_data "@ students.as_csv(students)"のように "@students"という引数を渡しています。student.rbでは、 def self.as_csv(list)のような引数で、このリストを反復しようとしますが、このリストは空です。 – Anukrity

関連する問題