查找没有关联或关联属性值的记录!=?

时间:2018-03-23 10:00:03

标签: ruby-on-rails rails-activerecord

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

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!='个人'(如果用户有照片)的最佳方法是什么?

我很感激任何帮助。谢谢!

2 个答案:

答案 0 :(得分:0)

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

# 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 :(得分:-2)

试试这个

User.joins(:photos).where("photos.user_id IS NOT NULL AND photos.name != ?", 'personal')

OR

User.joins(:photos).where.not(photos: {user_id: nil, photo_type: 'personal'})