更新2:
これははるかに良く見えます:
Comp.includes(:members).where('members.member_email = ? OR comps.user_id = ?', current_user.email,current_user.id)
アップデート:
これはうまくいくようですが、Railsでこれを行うためのよりエレガントな方法はありますか?あるに違いない気がします。
@my_comps = Comp.joins('LEFT OUTER JOIN teams ON teams.comp_id = comps.id LEFT OUTER JOIN members ON members.team_id = teams.id').where('members.member_email = ? OR comps.user_id = ?', current_user.email,current_user.id).group('comps.id')
オリジナル:
私のモデルの関連付けは次のとおりです。
Comp.rb
has_many :teams
has_many :members, :through => :teams
Team.rb
belongs_to :comp
has_many :members
Member.rb
belongs_to :team
comps.user_idが特定の値に等しいか、members.member_emailがそのCompのメンバーのいずれかの特定の値に等しいすべてのCompを検索するクエリを作成したいと思います。
私はこれを試しましたが失敗しました:
@my_comps = Comp.joins(:members).where('members.member_email = ? OR comps.user_id = ?', email, id)
返される結果には2つの問題があります。1)member_emailが条件に等しい場合に重複するCompを返し、2)user_idが条件に等しい場合にCompを返しません。このコードの最後に.group('id')を追加することで問題1を解決しましたが、それを行うためのより良い方法があると思います。さらに重要なことに、問題2は解決されません。
これに別の方法でアプローチする方法について何かアドバイスはありますか?本当にありがとう。