たとえば、次の 2 つのモデルがあるParent
とします。Child
親.rb
has_many :children
child.rb
belongs_to :parent
parent.children.last.gender == "boy"
ORのいずれかであるすべての親を検索したいparent.volunteer == "yes"
前もって感謝します。
たとえば、次の 2 つのモデルがあるParent
とします。Child
親.rb
has_many :children
child.rb
belongs_to :parent
parent.children.last.gender == "boy"
ORのいずれかであるすべての親を検索したいparent.volunteer == "yes"
前もって感謝します。
「最後の子供は男の子」である必要がありますか、それとも「男の子である子供がいます」は機能しますか? これは後者で機能します:
Parent.includes(:child).where("children.gender = 'boy' or parents.volunteer = 'yes'")
最後の子は男の子です: これは SQL で必要なものと同等のものです。おそらくこれを使用find_by_sql
して機能させるか、Rails 構文または Arel を使用して同様のものを作成できます。
select p.* from parents p inner join
(select parent_id, gender from children where id in (select max(id) from children group by parent_id)) c
on c.parent_id = p.id where p.volunteer = 'Yes' OR c.gender = 'Boy';
データベースのサイズによっては、このクエリを実行するのにかなりの費用がかかる場合があります。別の解決策として、最後の子の性別を親レコードに保存し、新しい子が追加されるたびに親の現在の性別と異なる場合は更新することもできます。