如何对两个关联执行OR查询?

时间:2012-06-09 10:31:34

标签: ruby-on-rails activerecord

在Rails 3.2中,在用户显示页面上,我正在尝试显示用户喜欢或标记的用户列表。

@user = User.find(params[:id])
@users = User.where(( id: @user.tags.uniq.map(&:user_id)) | (id: @user.likes.uniq.map(&:user_id)) )

这会产生语法错误。我尝试了其他一些排列,但没有运气。

对两个关联执行OR查询的正确语法是什么?

由于

1 个答案:

答案 0 :(得分:1)

在对两个查询使用id列时,您可以在执行查找之前合并@user.tags@user.likes的ID。

@user = User.find(params[:id])
user_ids = (@user.tags.map(&:user_id) + @user.likes.map(&:user_id))
@users = User.find(user_ids.uniq)

你可以对此进行更多改进,但这对我来说更容易理解。