0

在reports.rb 中,我有:

has_and_belongs_to_many :elements

在 elements.rb 中,我有:

has_and_belongs_to_many :reports

以下方法有效,但似乎比应有的更长:

@elements = []
Element.all.each do |element|
  @elements << element if element.reports.empty?
end

我尝试了以下方法,但它不起作用,因为没有报告列:

@element = Element.where(reports.empty?)

不幸的是,我尝试在 Rails API 参考中使用的所有词——find 等——都太通用了,以至于我找不到一种可以按照这种方式工作的方法,你可以看到我什么时候where工作。有吗?还是有其他方法可以简化此方法?

4

2 回答 2

1

我可以想到一种以低级方式执行此操作的方法。

Element
  .joins("LEFT OUTER JOIN element_reports")
  .group("elements.id")
  .having("element_reports.id IS NULL")

这至少将过滤的责任推给了数据库,而不是获取所有记录。这应该是一场胜利,特别是如果有很多记录,或者如果它们特别胖。

于 2013-02-25T09:29:35.057 回答
0

答案竟然是:

@elements = Element.all.keep_if {|e| e.reports.empty?}
于 2013-02-25T09:59:41.573 回答