私は自分が間違っていることを理解しようとするのに少し苦労しています。私の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
を取得します。私がここで間違っていることについて何か考えはありますか?
例外テキストNoMethodError (undefined method 'inform_user_empty' for nil:NilClass)
は、これがnil
クラスのインスタンスのインスタンスメソッド#inform_user_empty
の呼び出しであり、nil
にはインスタンスメソッドがないため- Ruby インタプリタがその例外をスローしました。私はそれの2つの主な理由を見ます:
self
キーワード変数にはnil
値がありますが、ApplicationController
と言ったように、コントローラーから呼び出しを行うため、理由はないと思います。 self
がnil
でないことを確認するには、コードを次のように変更します。
if @available_number.empty?
p self
self.inform_user_empty
アクションを再実行し、結果を確認します。
例外は別の場所からスローされました。したがって、投稿で完全なトレースログを指定する必要があります。