2014-02-11 3 views
4

내가 잘못하고있는 것을 파악하는 데 어려움이 있습니다. 내 ActiveRecord 쿼리가 NoMethodError이 발생한다고 생각하는 nil을 반환합니다. 여기 Ruby - NoMethodError (nil 클래스에 대해 정의되지 않은 메서드) :

내가 가진 무엇 : 행의 빈 집합 반환

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

: 내가 얻을

if (@available_number.empty?) 
    inform_user_empty 
else 
    do_my_other_function 

을 :하지만

=> #<ActiveRecord::Relation []> 

그래서를, 그때가

`NoMethodError (undefined method 'inform_user_empty' for nil:NilClass)` 
@available_number.blank?`@available_number.nil?

그리고 난 여전히 같은 NoMethodError를 얻을 수 : 10

나는 노력했다. 내가 여기서 잘못하고있는 것에 대한 아이디어가 있습니까?

+0

나는이 예외가'inform_user_empty'가 아니라고 믿습니다 : 당신이'self.inform_user_empty'를 호출했기 때문에'self'' nil'입니까? –

+0

나는 당신의 의견을 이해하지 못하지만,'inform_user_empty' 함수는'application_controller.rb'에 있습니다. – Dodinas

+1

네, 오류가 있습니다 :'undefined method 'inform_user_empty'for nil : NilClass' 즉,이 호출은'nil.inform_user_empty'이지만'inform_user_empty' 함수는'application_controller.rb'에 있습니다. 그럴 수는 없습니다. 'inform_user_empty'를'self.inform_user_empty'로 대체하십시오. 전에'p self '를 삽입하고 다시 시도하십시오. –

답변

1

콘솔에서 다음 줄을 실행하십시오 : 그것은 레일 액티브에서 NOT IN 상태를 확인하는 방법이 아니므로

@available_number = UserNumber.where.not(:user_num => @number_exclude_list) 

는 그것이 ArgumentError: wrong number of arguments (0 for 1+)를 반환합니다.

User.where('user_num NOT IN (?)',@number_exclude_list) 

다음을 수행하십시오 :

는로 교체 문제를 해결할 수

if @available_number == nil 
    inform_user_empty 
else 
    do_my_other_function 
end 

Hoep합니다. 그것이 정말로 당신을 도왔다면 알려주십시오.

2

예외 텍스트 NoMethodError (undefined method 'inform_user_empty' for nil:NilClass)는이 nil class'es 인스턴스의 인스턴스 메소드 #inform_user_empty를 호출, 그리고 nil 더 인스턴스 방법이 없기 때문에 인터프리터가 예외를 throwed 말한다. 나는 그것을 위해 두 가지 주요 이유를 참조하십시오

  1. self 키워드 변수가 nil 값을 가지고, 당신이 컨트롤러에서 호출을하기 때문에 당신이 ApplicationController을 말했듯이 나는, 그 이유에없는 믿습니다.

    if @available_number.empty? 
        p self 
        self.inform_user_empty 
    

    이 작업을 다시 실행하고 결과를 보면 : self가되지 nil 있는지 확인하려면 다음 중 하나에 코드를 변경합니다.

  2. 예외가 다른 장소에서 발생했습니다. 따라서 게시물에 전체 추적 로그를 지정해야합니다.

관련 문제