たとえば、2つのモデルがあります。
購入(belongs_to:users)ユーザー(has_many:purchases)
少なくとも1回購入したすべてのユーザーを選択したい。
SQLでは次のように記述します。
SELECT * FROM `users` WHERE `id` IN (SELECT DISTINCT `buyer_id` FROM `purchases`)
そしてもう1つの質問:アレルをカバーする完全なドキュメントや本はありますか?
たとえば、2つのモデルがあります。
購入(belongs_to:users)ユーザー(has_many:purchases)
少なくとも1回購入したすべてのユーザーを選択したい。
SQLでは次のように記述します。
SELECT * FROM `users` WHERE `id` IN (SELECT DISTINCT `buyer_id` FROM `purchases`)
そしてもう1つの質問:アレルをカバーする完全なドキュメントや本はありますか?
うーん、私の質問に答えたいのですが... :)
buyers=purchases.project(:buyer_id).group(purchases[:buyer_id]) #<-- all buyers
busers=users.where(users[:id].in(buyers)) #<--answer
Railsガイドには、ARelに関する非常に優れたドキュメントがあります。
http://guides.rubyonrails.org/active_record_querying.html#conditions
Rails APIは、よりあいまいなオプションのいくつかにも非常に役立ちます。「railsapi」で特定の用語をグーグルで検索すると、最初に表示されます。
上記のコードがネストされたクエリを発行するとは思わない。代わりに、2つの別々のSQLクエリを発行するようです。同等の速度(パフォーマンスへの関心度によって異なります)がある場合もありますが、サーバーへのラウンドトリップが2回あるため、ネストされたクエリと同じ利点は得られません。