这是代码
#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?
感谢。
答案 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
上致电nil
。 nil
是NilClass
的一个实例,team
上没有名为NilClass
的方法。