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

时间:2015-01-11 01:16:01

标签: ruby-on-rails ruby rails-activerecord

假设我有三个模型(模型已更改,我不会使用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执行此操作,以避免将大量对象加载到内存中。希望以前没有问过这个问题,谷歌很难实现。

3 个答案:

答案 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)