我有一个简单的关联,如:
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!='个人'(如果用户有照片)的最佳方法是什么?
我很感激任何帮助。谢谢!
答案 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'})