【问题标题】:NoMethodError for object对象的 NoMethodError
【发布时间】:2011-10-25 02:13:32
【问题描述】:

这里是代码

  #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 中的一个字段。这是工厂中的用户级别:

Factory.define :user_level do |level|

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

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

既然 team 是 user_level 中的一个字段,为什么 spec 中会出现如下错误:NoMethodError: nil:NilClass 的未定义方法“团队”?

谢谢。

【问题讨论】:

  • 请写一个有意义且相关的标题。如果 nil.team 不是一种方法,那么问题就来了。

标签: ruby-on-rails ruby rspec2


【解决方案1】:

问题在于nil.team 不是方法*

NoMethodError:
   undefined method `team' for nil:NilClass

也就是说,ul 的计算结果为 nil:在检查 ul.nil? 之前检查 ul.team.nil?... 但可能想找出查找失败的原因 ;-)

编码愉快。


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

【讨论】:

    【解决方案2】:

    调用

     ul = UserLevel.find_by_user_id(session_user_id)
    

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

    所以当你打电话时

    !ul.team.nil?
    

    Ruby 尝试在 nil 上调用 teamnilNilClass 的一个实例,在 NilClass 上没有名为 team 的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-15
      • 1970-01-01
      相关资源
      最近更新 更多