我正在开发一个应用程序的一部分,它将根据父母其他孩子的属性对孩子列表进行排序。
以下是我正在学习的课程:

class SpecialChild
  belongs_to: Parent

class Child_A
  belongs_to: Parent

class Child_B
  belongs_to: Parent

class Parent
  has_many: SpecialChild
  has_many: Child_A
  has_one: Child_B

以下是应用于它的两个顺序函数:
scope :order_child_a,
  joins("INNER JOIN child_a ON specialchild.parent_id = child_a.parent_id").
  where("booleanvalue = true")

scope :order_parent_and_child_b,
  joins("LEFT OUTER JOIN parent ON specialchild.parent_id = parent.id").
  joins("LEFT OUTER JOIN child_b AS name ON parent.child_b_id = child_b.id").
  order("name ASC, parent.lastname ASC")

我的问题是,即使在这个列表中只有一个特殊的孩子,但它的父对象有多个BooLoalValue=真的多个子Hytha,所以即使不存在,我也会看到同一个特殊的孩子出现的副本。
编辑:
问题出现在第一个范围内,尽管我包含了第二个范围,因为由于缺少预期的信息,我无法在不命中更多错误的情况下执行.uniq。我也希望避免修改order_parent_和_child_b,因为它在整个应用程序中都使用。

最佳答案

我不知道我是否理解正确,但也许您可以通过在where子句中指定表的名称来避免这个问题,例如:

scope :order_child_a,
  joins("INNER JOIN child_a ON specialchild.parent_id = child_a.parent_id").
  where("specialchild.booleanvalue = true")

10-06 01:02