当前位置: 首页 > 知识库问答 >
问题:

Ruby-未定义的方法“empty?”对于nil:NilClass

申屠亦
2023-03-14

超过3个小时,我试图解决相当容易的错误(第一眼):

undefined method `empty?' for nil:NilClass

但还是没有成功。

我有DB表products,其中包含列category\u id和manufacturer\u id。

协会:

class Product < ActiveRecord::Base
  belongs_to :manufacturer
  belongs_to :category
  ...
end
class Category < ActiveRecord::Base # the same for Manufacturer
  has_ancestry
  has_many :products

end

试图获取一些数据

Product.where('category_id IS NOT NULL AND manufacturer_id IS NOT NULL').each do |product|
  ...
  puts product.manufacturer.name # here's the error
  puts product.category.name # here's the error
  ...
end

我获取了所有行,其中在列manufacturer\u id和category\u id中不是零值。。。那么我怎么才能得到这个错误呢?

此外,我尝试过:

 ...
  puts product.manufacturer.name unless product.manufacturer_id.nil?
  puts product.category.name unless product.category_id.nil?
  ...

我做错了什么?


共有2个答案

陶高峻
2023-03-14

考虑到您的查询,可能是数据库上的业务逻辑问题。

恕我直言,您正在调用一些无效的对象。检查您的数据库以查看是否所有寄存器都参加了您的验证逻辑。

桂坚
2023-03-14

您很可能删除了制造商或类别,因此没有与外键匹配的相应记录。

 类似资料:
  • 我想用ruby制作一个康威的生活游戏版本。我创建了一个网格类,其中@play\u area作为实例变量。然而,当我运行代码时,@play\u area在经过两次求值后显示为nil(当在行中求值时,如果@play\u area[x\u mod][y\u mod].alive)。为什么会这样? 编辑 以下是初始化函数: 以下是发生错误的函数: 对@play_area中每个单元格的检查显示每个单元格都正

  • 我知道有很多类似的问题,但这些解决方案都不管用。我有一个关系数据库。具体来说,我有两个相互关联的表格:程序和讲师。 表之间的关系如下: 一个程序“has_many:讲师”和一个讲师“belongs_to:程序” 以下是表格模型的代码: 我还有一个非常简单的观点: 控制器为: 问题是RoR没有识别表之间的关系,导致行"@an.instructors.empty?失败,并出现以下错误:nil的未定义方

  • 我正在玩ruby混合的一些基础知识,由于某种原因无法从我的模块访问行为。 在Ruby Fiddle上运行它: 这会不断返回 我从tutorialspoint对mixin应该如何工作的理解让我觉得我应该能够有效地调用e.meow ,并返回与调用猫相同的结果。喵 。 这是RubyFiddle中的代码。 难以置信的基本,但你知道我在哪里跌倒吗?

  • 我正在学习Ruby,我有一个无法理解的bug。我有一个方法,它接受一个字符串(行)数组,并删除所有行,直到包含模式的某一行。该方法如下所示: 这工作正常,生成的字符串(行)正确显示在我正在生成的网页上。 此外,我想删除该模式后面的所有非空行。我修改了方法如下: 令人惊讶的是(至少对我来说)这不起作用。在生成的网页上,我看到的不是内容,而是错误消息:Liquid error:nil类的未定义方法“[

  • 问题内容: 取自Android的想法:从对话框中模糊和暗化背景窗口。我无法使对话框下的内容模糊。当调用eula.getWindow()时,我收到此错误: 对于类型AlertDialog.Builder,未定义方法getWindow() 随同主要活动中的以下代码一起显示出eula: 任何帮助是极大的赞赏。 问题答案: 是对话框类的方法,而不是对话框生成器的方法。您的代码应该看起来像这样: 请注意,尽

  • 我试图让它在用户按下登录时关闭我的jframe。然而,它不让我处理登录窗口。请帮帮我。谢谢你。