【问题标题】:Find records either with no association or where association attribute value !=? [duplicate]查找没有关联或关联属性值为 !=? 的记录[复制]
【发布时间】:2018-09-01 23:16:06
【问题描述】:

我有一个简单的关联,例如:

class User < ActiveRecord::Base
   has_many :photos
end

class Photo < ActiveRecord::Base
   belongs_to :user

   # Photo fields => id, image, photo_type
end

在照片模型中photo_type 的值可以是“个人”、“家庭”或“官方”。

让所有用户都没有照片或 photo_type != 'personal'(如果用户有照片)的最佳方法是什么?

如果有任何帮助,我将不胜感激。谢谢!

【问题讨论】:

    标签: ruby-on-rails rails-activerecord


    【解决方案1】:

    我已经标记了一个有很多答案的副本,但简而言之,您可以使用:

    # No photos
    User.includes(:photos).where( photos: { user_id: nil } )
    # Not personal
    User.includes(:photos).where.not( photos: { photo_type: "personal" } )
    
    # Users with photos, where the `photo_type` isn't "personal"
    User.includes(:photos).where.not( photos: { user_id: nil, photo_type: "personal" } )
    

    还有一种 Rails 5 方法可以避免加载关联,尽管我个人还没有使用过:

    User.left_outer_joins(:photos).where.not( photos: { user_id: nil, photo_type: "personal" } )
    

    看起来怎么样?最后一个选项做你所追求的?

    如果您有任何问题,请告诉我。

    【讨论】:

    • 好的,刚试过+1
    • 这对@RakeshPatidar 有帮助吗?
    猜你喜欢
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    相关资源
    最近更新 更多