找到记录后得到未定义的方法错误?

时间:2016-04-29 07:14:18

标签: ruby-on-rails ruby

所以情况就是这样。那里有一个名为Course的表。课程可以有很多GA(研究生助理)。

我找到了这样一个特定的课程:

this_course = Course.where("name = 'COMP1900'")

然后我尝试测试他们当前是否分配了任何GA(这在代码的其他地方有用):

if this_course.gas.empty?

所以这会引发一个未定义的方法错误。怎么会?使用.gas.empty?其他地方似乎也有效。

2 个答案:

答案 0 :(得分:3)

应该是这样的:this_course = Course.where("name = 'COMP1900'").first 由于where子句返回一个数组对象。

答案 1 :(得分:1)

where为您提供数组对象,这些对象符合您作为参数传递的条件。

在您的情况下,假设 3 项目符合您Course.where("name = 'COMP1900'")的条件。

然后,this_course将如下所示:

this_course = [Object_1, Object_2, Object_3]

由于this_course是数组即使gasCourse的属性,它也不是数组的属性或方法,所以它会给你一个错误。

你可以通过抓住满足这个条件的第一个元素来解决这个问题:

this_course = Course.where("name = 'COMP1900'").first

或者你也可以这样做: this_course = Course.find_by(name: 'COMP1900')也将返回第一个元素。