みんな大好き Ruby にてSQLでデータベースからとってきた結果をもとに素朴にCSVをつくろうと、検索した記事を参考に書いてみると・・・・
require 'csv'
CSV.generate do |csv|
@query_result.each{|row|
csv << row
}
end
csv << row
の箇所でこんなエラーが出ました。インスタンス変数 @query_result
は ActiveRecord::Result クラスです。
NoMethodError - undefined method 'collect' for nil:NilClass:
@query_result
をそのまま each するとブロック変数は Hash になるので values でとってくる必要があります
require 'csv'
CSV.generate do |csv|
@query_result.each{|row|
csv << row.values
}
end
あるいは、 @query_result.rows
で配列としてとってくるか。
CSV.generate do |csv|
csv << @query_result.columns
@query_result.rows.each{|row|
csv << row
}
end
エラーメッセージから直接にわかりにくい問題と感じたのと、検索しても同じ問題にぶつかった日本語記事がなかったので書いてみました。classを確認してドキュメントをみてみるのが近道ですね
https://api.rubyonrails.org/classes/ActiveRecord/Result.html
(大きな誤解をしていたため大幅に更新しました @scivola さんありがとうございます!)