2014-02-11 99 views
4

我在試圖弄清楚我做錯了什麼時遇到了一些困難。我的ActiveRecord查詢正在返回nil,我認爲這導致NoMethodError被引發。Ruby - NoMethodError(未定義的方法爲零:NilClass):

這是我有:

@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。關於我在這裏做錯的任何想法?

+0

我相信,這不是適當的地方'inform_user_empty'的例外:因爲你已經調用self.inform_user_empty',是'self'' nil'嗎? –

+0

我不太瞭解你的評論,但'inform_user_empty'函數在'application_controller.rb'中。 – Dodinas

+1

是的,但你的錯誤說:'nil:NilClass'的未定義方法'inform_user_empty',換句話說,這是通過調用'nil。inform_user_empty',但是因爲'inform_user_empty'函數在'application_controller.rb'中。它不可能。將'inform_user_empty'替換爲'self.inform_user_empty'。先插入'p self',然後再試一次 –

回答

1

請運行在控制檯下面一行:

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

它,因爲它是不檢測的Rails的ActiveRecord NOT IN條件的方式返回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沒有實例方法解釋扔那個例外。我看到兩個主要原因是:

  1. self關鍵字變量nil價值,相信沒有原因,因爲你從控制器做的調用,如你所說ApplicationController。爲了確保selfnil,代碼更改爲以下之一:

    if @available_number.empty? 
        p self 
        self.inform_user_empty 
    

    重新運行的動作,看看結果。

  2. 從另一個地方拋出異常。所以你必須在你的文章中指定完整的跟蹤日誌。

相關問題