[英]undefined method `empty?' for nil:NilClass how to avoid it
大家好我有这个代码:
@coursesFound = @user.available_courses
@courses = []
for course in @coursesFound do
@courseInGroups = course.user_groups
for group in @courseInGroups do
@group = UserGroup.find group.id
if @group.users.map { |u| u.id }.include? @user.id
@courses << course
break
end
end
end
# Wenn ein Kurs keiner Gruppe hinzugefügt wurde
if @courseInGroups.empty?
@courses << course
end
在我的 debian 虚拟机上它工作正常,但在我的实时系统上我收到了这个错误:
undefined method `empty?' for nil:NilClass
我怎样才能避免这种情况?
如果这个@coursesFound = @user.available_courses
返回一个空的activerecord关系。
然后这将不会执行
for course in @coursesFound do
@courseInGroups = course.user_groups
for group in @courseInGroups do
@group = UserGroup.find group.id
if @group.users.map { |u| u.id }.include? @user.id
@courses << course
break
end
end
end
这意味着当你到达这里@courseInGroups
是零
if @courseInGroups.empty?
@courses << course
end
所以你的快速解决方案就是
if @courseInGroups && @courseInGroups.empty?
@courses << course
end
您还需要正确初始化对象。
@courseInGroups = course.user_groups || []
如果正确初始化,你将不会得到nil:NilClass
错误。
要摆脱nil:NilClass
错误,你可以使用其他答案。 喜欢try
等
不要忘了blank?
使用rails时。 在这里,您可以找到有或没有rails的所有方法的概述。
我没有分析你的代码,它只是为了你,我和其他不经常使用这种方法的人,把它们混合然后来到这里 - 只是为了记住: empty?
不是blank?
。
您可以使用try
方法来避免此错误
@ courseInGroups.try(:空?)
如果@courseInGroups
为零,则不会抛出错误
你可以把“?” 在空点之前,则: if @courseInGroups?.empty
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.