でテーブルを結合しますはを通じて兄弟を見つけることは、私は次の構造を持つモデルのユーザー、グループ、およびメンバーシップを持っているRailsの
class User < ApplicationRecord
has_many :memberships
has_many :groups, through: :memberships
end
class Group < ApplicationRecord
has_many :memberships
has_many :users, through: :memberships
end
class Membership < ApplicationRecord
belongs_to :user
belongs_to :group
end
基本的には、メンバーシップは、ユーザおよびグループのテーブルを結合しています。
ユーザーuser
が与えられていると、少なくとも同じグループに属しているすべての兄弟ユーザーを見つけることができますか?それは私が単一のクエリにし、専らアクティブレコードでそれをやってみたい
user.groups.users # assuming such a line were possible
のようなものですが、それは速いですかはるかに読みやすい場合、私は2つのクエリでOKです。 (それは同様に役立ちます場合はDB言語はPSQLである。)
ありがとうございます!私はちょうどコメントを残すことになっていないと知っているが、これは素晴らしい作品であり、IDをサブセレクトすることは賢明である。 (そして、はい、私はインデックスを持っています:)) –
ああ、1つのコメント:これは重複を防ぐために最後に 'distinct'を使うことができることを認識しました。 –
はい、結果は関係なので、望む通りにチェーンすることができます。また、 'join 'の代わりに' include'を試すこともできます。 'distinct'は必要ありませんが、追加のメモリはARオブジェクトのインスタンス化に費やされます。ちょうどもう一つの変形を追加しました。 –