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 任何成员的特定值的 Comps。

我没有成功地尝试过这个:

@my_comps = Comp.joins(:members).where('members.member_email = ? OR comps.user_id = ?', email, id)  

返回的结果有 2 个问题:1)它返回重复的 Comps,其中 member_email 等于条件;2)它不返回 user_id 等于条件的 Comps。我通过在代码末尾添加 .group('id') 解决了问题 1,但我觉得可能有更好的方法来解决问题,更重要的是它并不能解决问题 2。

有关如何以不同方式处理此问题的任何建议?非常感谢。

4

1 回答 1

0

更改了建议,不知道.join仅在较新的 Rails 中使用“INNER JOIN”(具有旧版本)。最后的建议是:使用.include而不是.join

于 2012-11-20T21:43:36.023 回答