获取关系中成员的所有关系

Get all relations to members in a relation

假设我有三个模型(模型改变了,我通常不会使用 has_many :through 这种关系):

class User << ActiveRecord::Base
    has_many :image_users
    has_many :images, through: :image_users
end
class ImageUser << ActiveRecord::Base
    belongs_to :user
    belongs_to :image
end

class Image << ActiveRecord::Base
    has_many :image_users
    has_many :users, through: :image_users
    has_many :comments, through: :image_comments
end

class ImageComment << ActiveRecord::Base
    belongs_to :image
    belongs_to :comment
end


class Comment << ActiveRecord::Base
    has_many :image_comments
    has_many :images, through: :image_comments
end

给定一个用户,我如何select对其图片发表所有评论?理想情况下,我会使用 ActiveRecord 或 SQL 来避免将大量对象加载到内存中。希望之前没有人问过这个问题,google 很难做到。

User
has_many :images
has_many :comments

Image
belongs_to :user
has_many :comments

Comment
belongs_to :user
belongs_to :image

它会是这样的

@user.images.each {|e| e.comments}

如果你从@railsr 的回答中获取关系,你可以这样做:

Comment.where(image_id: @user.images.pluck(:id))

当然,这需要两个查询,但您可以使用一些原始 SQL 并将其合并为一个。

您应该能够做到这一点,让 Rails 处理 SQL:

@user.images.includes(:comments).map(&:comments)