Rails中的JOIN语句与2个表中的OR条件

时间:2012-11-20 20:32:33

标签: ruby-on-rails activerecord

更新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')

ORIGINAL:

我的模特协会是:

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等于特定值的所有Comps或者members.member_email等于该Comp的任何成员的特定值。

我没试成功:

@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.

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

1 个答案:

答案 0 :(得分:0)

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