0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

RubyのCSV作成時に undefined method 'collect' for nil:NilClass エラーが出たときの対処

Last updated at Posted at 2023-11-30

みんな大好き Ruby にてSQLでデータベースからとってきた結果をもとに素朴にCSVをつくろうと、検索した記事を参考に書いてみると・・・・

require 'csv'
CSV.generate do |csv|
  @query_result.each{|row|  
    csv << row
  }
end

csv << row の箇所でこんなエラーが出ました。インスタンス変数 @query_resultActiveRecord::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 さんありがとうございます!)

0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?