【问题标题】:How to perform an OR query on two associations?如何对两个关联执行 OR 查询?
【发布时间】:2012-06-09 10:31:33
【问题描述】:

在 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 查询的正确语法是什么?

谢谢

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案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)
    

    您可能可以进一步完善它,但对我来说这看起来更容易理解。

    【讨论】:

    • 不错!我需要where(id: user_ids.uniq) 而不是find,但这不是重点。这是一个非常好的解决方案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 2021-11-05
    相关资源
    最近更新 更多