我有4个模特:
class Category < ActiveRecord::Base
has_many :posts
end
class Post < ActiveRecord::Base
belongs_to :category
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :post
belongs_to :user
end
class User < ActiveRecord::Base
has_many :comments
end
我需要获取所有包含某个用户发表评论的帖子的类别。 我正在生成一个包含所有类别和帖子的json,但不会生成评论。
我正在使用的查询:
@categories = Category.includes(:posts => :comments).where(:comments => { :user_id => params[:user_id] } )
我正在使用rabl:
collection @categories
attributes ...
child :posts do
attributes ...
end
但是这得到了所有评论。 如果我使用连接而不是包含,那么我将遇到n + 1问题。
我该如何进行查询?
答案 0 :(得分:1)
includes
方法仅对急切加载有帮助,它无法帮助您获取适当的记录。
你需要的可能是这样的:
# get all posts with comments made by the user
posts = Post.where(:comments => { :user_id => params[:user_id] })
# fetch the categories for those posts
@categories = Category.find(posts.map(&:category_id).uniq)