0

我有这个工作在一定程度上,但我正在寻找一些关于如何查询一对多关系中的兄弟姐妹的输入,看看是否有更优雅的方式来完成这个。

考虑以下类

class Post < ActiveRecord::Base
  has_many :post_categories
  has_many :categories, :through => :post_categories
end


class Category < ActiveRecord::Base
  has_many :post_categories
  has_many :posts, :through => :post_categories
end

根据定义,帖子可以有多个类别,我需要它来在网站上显示“相关帖子”区域。就像我之前提到的那样,我确实有一个工作版本,只需执行以下操作:

Post.find(id, :include => {:categories => :posts})

查看日志,应用程序必须执行 5 次查询才能获得我正在寻找的最终数据。

任何想法表示赞赏!

4

2 回答 2

3

我看到您对已有内容的唯一问题是您可能不想返回与帖子共享类别的所有帖子。

@post = Post.find params[:id]
@related_posts = Posts.find(:all, :joins => :post_categories,
                              :select => "posts.*, count(post_categories) post_category_count", 
                              :conditions => {:post_categories => {:category => @post.categories}}, 
                              :group => "posts.id", :order => "post_category_count desc")

这将首先返回最相关的帖子,即。那些具有最多共享类别的类别,您可以添加限制或分页以限制返回的结果。

于 2010-08-04T12:59:45.790 回答
0

如果您需要对大型对象树的支持,您可能想看看很棒的嵌套集,认为它可能对这个问题有点矫枉过正。

于 2010-08-04T13:35:15.750 回答