如果我的术语错了,请原谅我;我还是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}}方法返回数组,它不提供相同的功能。他建议的替代解决方案是使用命名范围。
我抗议道:“但是......我很确定我已经尝试它已经......并且工作了。”
果然,确实似乎有效,正如我们在测试时发现的只是为了幽默我。我的队友失踪了什么?我当然没有专业知识来看看他说的话可能是错的(这对我来说很有意义)。
答案 0 :(得分:2)
我接受了,self.deliverables
由:has_many
关联定义。在这种情况下,它不仅仅是一个简单的数组。 official rails guide中突出显示了您可以对此类收集执行的一些操作。特别是,检查部分 4.3.1.10 collection.find(...):
collection.find方法查找集合中的对象。它使用与ActiveRecord :: Base.find相同的语法和选项。
它没有明确提及find_by_xxx
语法,但是和我一样,我发现它在实践中有效。