假设我有三个模型(模型已更改,我不会使用has_many:通常用于此类关系):
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
鉴于用户,如何选择其图片上的所有评论?理想情况下,我会使用ActiveRecord或SQL执行此操作,以避免将大量对象加载到内存中。希望以前没有问过这个问题,谷歌很难实现。
答案 0 :(得分:1)
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}
答案 1 :(得分:1)
如果您从@ railsr的答案中获取关系,您可以这样做:
Comment.where(image_id: @user.images.pluck(:id))
当然,这需要两个查询,但您可以使用一些原始SQL并将其合并为一个。
答案 2 :(得分:1)
您应该能够执行此操作并让Rails处理SQL:
@user.images.includes(:comments).map(&:comments)