繁体   English   中英

未定义的方法“空?” 对于 nil:NilClass 如何避免它

[英]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为零,则不会抛出错误

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

你可以把“?” 在空点之前,则: if @courseInGroups?.empty

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM