对象的NoMethodError

时间:2011-10-25 02:13:33

标签: ruby-on-rails ruby rspec2

这是代码

  #add email of team lead of the current user
  def add_the_tl_email(to_address, session_user_id)
    ul = UserLevel.find_by_user_id(session_user_id)
    if !ul.team.nil? && !ul.role.nil?
      User.user_status('active').joins(:user_levels).where(:user_levels => {:position => 'tl', 
                                                      :role => ul.role, 
                                                      :team => ul.team }).each do
        |u| to_address << u.email 
      end
    end
  end

规范中的错误:

  1) CustomersController GET customer page 'create' successful should create one customer record
     Failure/Error: post 'create', :customer => @customer
     NoMethodError:
       undefined method `team' for nil:NilClass
     # ./app/mailers/user_mailer.rb:36:in `add_the_tl_email'
     # ./app/mailers/user_mailer.rb:15:in `notify_tl_dh_ch_ceo'
     # ./app/controllers/customers_controller.rb:27:in `create'
     # ./spec/controllers/customers_controller_spec.rb:48:in `block (5 levels) in <top (required)>'
     # ./spec/controllers/customers_controller_spec.rb:47:in `block (4 levels) in <top (required)>'

team是user_level中的一个字段。这是工厂中的user_level:

Factory.define :user_level do |level|

  level.role                 "sales"
  level.position             "member"
  level.team                 1
  level.association          :user
end

在rails控制台中,ul.team.nil?对工厂生成的测试数据返回true或false。

由于team是user_level中的一个字段,为什么规范中存在错误,如:NoMethodError:            未定义的方法`team'代表nil:NilClass?

感谢。

2 个答案:

答案 0 :(得分:3)

问题是nil.team不是方法*

NoMethodError:
   undefined method `team' for nil:NilClass

也就是说,ul评估为nil:在检查ul.nil?之前检查ul.team.nil? ...但可能想知道查找失败的原因; - )

快乐的编码。


*这就是真正的错误消息所说的,帖子的标题是垃圾: - /

答案 1 :(得分:2)

中的电话
 ul = UserLevel.find_by_user_id(session_user_id)

返回nil,因此nil被分配到ul

所以当你打电话时

!ul.team.nil?

Ruby尝试在team上致电nilnilNilClass的一个实例,team上没有名为NilClass的方法。