带有子项的记录的Rails范围

时间:2018-02-16 07:19:51

标签: sql ruby-on-rails activerecord

有没有一种简单易行的方式来做这样的事情?

class People < ActiveRecord::Base
  has_many :babies
  scope :with_babies -> { where(babies.count > 0) }
end

在SO上有很多类似的问题,但它们都依赖于复杂的唯一SQL语句。有没有简单的rails方式呢?

1 个答案:

答案 0 :(得分:1)

您可以使用SQL join + distinctness来实现简单方法。它可能会引入问题,以防您希望将来根据此情况进行非独特查询,但我不认为这种情况经常发生,所以这应该让您开始。它确实提供了比添加自定义SQL更好的可读性。

scope :with_babies, -> { joins(:babies).distinct }