更新 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。
有关如何以不同方式处理此问题的任何建议?非常感谢。