0

私はこれをある程度機能させていますが、これを達成するためのよりエレガントな方法があるかどうかを確認するために、1対多の関係で兄弟を照会する方法に関するいくつかの入力を探しています。

次のクラスを検討してください

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 に答える