1

更新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は解決されません。

これに別の方法でアプローチする方法について何かアドバイスはありますか?本当にありがとう。

4

1 に答える 1

0

.join提案を変更しましたが、新しいRails(古いバージョン)で「INNERJOIN」のみを使用していることを知りませんでした。最後の提案は次のとおりです。.include代わりに使用する.join

于 2012-11-20T21:43:36.023 に答える