web-dev-qa-db-ja.com

Ruby --NoMethodError(nil:NilClassの未定義メソッド):

私は自分が間違っていることを理解しようとするのに少し苦労しています。私のActiveRecordクエリはnilを返していますが、これがNoMethodErrorを発生させていると思います。

これが私が持っているものです:

@number_exclude_list = ["1234567890", "2223334545"] 
@available_number = UserNumber.where.not(:user_num => @number_exclude_list)

空の行セットを返します。

=> #<ActiveRecord::Relation []>

だから、私は持っています:

if (@available_number.empty?)
   inform_user_empty
else
   do_my_other_function

しかし、私は得ます:

`NoMethodError (undefined method 'inform_user_empty' for nil:NilClass)`

私が試してみました: @available_number.blank?および`@available_number.nil?

そして、私はまだ同じNoMethodErrorを取得します。私がここで間違っていることについて何か考えはありますか?

5
Dodinas

例外テキストNoMethodError (undefined method 'inform_user_empty' for nil:NilClass)は、これがnilクラスのインスタンスのインスタンスメソッド#inform_user_emptyの呼び出しであり、nilにはインスタンスメソッドがないため- Ruby インタプリタがその例外をスローしました。私はそれの2つの主な理由を見ます:

  1. selfキーワード変数にはnil値がありますが、ApplicationControllerと言ったように、コントローラーから呼び出しを行うため、理由はないと思います。 selfnilでないことを確認するには、コードを次のように変更します。

    if @available_number.empty?
       p self
       self.inform_user_empty
    

    アクションを再実行し、結果を確認します。

  2. 例外は別の場所からスローされました。したがって、投稿で完全なトレースログを指定する必要があります。