1

我有 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 问题。

我应该如何进行查询?

4

1 回答 1

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)
于 2013-05-28T13:46:50.113 回答