更新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.
关于如何以不同方式处理此问题的任何建议?非常感谢。
答案 0 :(得分:0)
更改了建议,不知道.join
仅在较新的Rails中使用“INNER JOIN”(具有旧版本)。
最终的建议是:使用.include
代替.join