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

低レベルの方法でこれを行う1つの方法を考えることができます。

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

これにより、すべてのレコードをフェッチする代わりに、少なくともフィルタリングの責任が DB にプッシュされます。これは、特に記録が多い場合、またはそれらが特に太っている場合に有利です。

于 2013-02-25T09:29:35.057 に答える
0

答えは次のようになりました。

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