1

親の他の子の属性に基づいて子のリストを並べ替えるアプリの一部に取り組んでいます。

私が取り組んでいるクラスは次のとおりです。

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

これらは、それに適用される 2 つの順序関数です。

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")

私の問題は、このリストに SpecialChild が 1 つしかないにもかかわらず、その親に booleanvalue = true を持つ複数の Child_A があるため、存在しない場合でも同じ SpecialChild のコピーが表示されることです。

編集:最初のスコープで問題が発生しますが、予想される情報が欠落しているためにエラーが発生することなく.uniqを実行できないため、2番目のスコープを含めました。また、アプリ全体で使用される order_parent_and_child_b の変更も避けたいと思います。

4

2 に答える 2

0

正しく理解しているかどうかはわかりませんが、次のように where 句内でテーブルの名前を指定するだけで、この問題を回避できる可能性があります。

scope :order_child_a,
  joins("INNER JOIN child_a ON specialchild.parent_id = child_a.parent_id").
  where("specialchild.booleanvalue = true")
于 2013-08-07T21:01:44.290 に答える