我在一定程度上有这个工作,但我正在寻找一些关于如何在一对多关系中查询兄弟姐妹的输入,看看是否有更优雅的方法来实现这一点。
考虑以下课程
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})
查看日志,应用程序必须执行五个查询以获取我要查找的最终数据。
任何想法都表示赞赏!
答案 0 :(得分: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")
这将首先返回最相关的帖子,即。具有最多共享类别的那些,您可以添加限制或分页以限制返回的结果。
答案 1 :(得分:0)
如果您需要支持大型对象树,您可能需要查看awesome nested set,认为这个问题可能有点过分。