2014-02-11 104 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. 从另一个地方抛出异常。所以你必须在你的文章中指定完整的跟踪日志。

相关问题