关于rails上的ruby:未定义的方法`空? 对于nil:NilClass如何避免它

undefined method `empty?' for nil:NilClass how to avoid it

大家好我有这个代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 @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 vm它工作正常但在我的实时系统上我得到了这个错误:

1
undefined method `empty?' for nil:NilClass

我怎么能避免这个?


如果此@coursesFound = @user.available_courses返回空的activerecord关系。

然后这将不会执行

1
2
3
4
5
6
7
8
9
10
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是零

1
2
3
if @courseInGroups.empty?
  @courses << course
end

所以你的快速解决方案就是

1
2
3
if @courseInGroups && @courseInGroups.empty?
  @courses << course
end


使用rails时不要忘记blank?。 在这里,您可以找到有或没有rails的所有方法的概述。

我没有分析你的代码,只是为了你,我和其他不经常使用这种方法的人,将它们混合然后来到这里 - 只是为了记住:empty?不是blank?


您还需要正确初始化对象。

1
@courseInGroups = course.user_groups || []

如果正确初始化,则不会再出现nil:NilClass错误。

要摆脱nil:NilClass错误,您可以使用其他答案。 喜欢try


您可以使用try方法来避免此错误

@ courseInGroups.try(:空?)

如果@courseInGroups为零,则不会抛出错误

http://apidock.com/rails/Object/try