find_by_id等是如何在ActiveRecord数组上工作的呢?

时间:2010-10-06 04:24:46

标签: ruby-on-rails ruby arrays activerecord named-scope

如果我的术语错了,请原谅我;我还是Ruby Rails的新手。

对于学校,我正在作为团队的一部分从事RoR项目。我和一个队友结对编程,他实际上在RoR中经验丰富;我写了类似下面的内容:

d = self.deliverables.find_all_by_lifecycle_id(self.lifecycle_id)

我的配对编程伙伴此时阻止了我,并解释说这不起作用,因为find_all_by_lifecycle_id只有Deliverable模型调用才能成功解析,ActiveRecord::Base模型继承自self.deliverables (反过来,负责提供这种神奇功能的类)。 {{1}}方法返回数组,它不提供相同的功能。他建议的替代解决方案是使用命名范围

我抗议道:“但是......我很确定我已经尝试它已经......并且工作了。”

果然,确实似乎有效,正如我们在测试时发现的只是为了幽默我。我的队友失踪了什么?我当然没有专业知识来看看他说的话可能是错的(这对我来说很有意义)。

1 个答案:

答案 0 :(得分:2)

我接受了,self.deliverables:has_many关联定义。在这种情况下,它不仅仅是一个简单的数组。 official rails guide中突出显示了您可以对此类收集执行的一些操作。特别是,检查部分 4.3.1.10 collection.find(...)
collection.find方法查找集合中的对象。它使用与ActiveRecord :: Base.find相同的语法和选项。

它没有明确提及find_by_xxx语法,但是和我一样,我发现它在实践中有效。