9

アプリケーションをRails3にアップグレードすることを計画しています。私たちがかなり使用したプラグインの1つは、nested_has_many_throughです。このプラグインは古く、メンテナンスされていないようで、新しいRails3アプリケーションでは機能していないようです。

簡単な例:

Author.rb
has_many :posts
has_many :categories, :through => :posts, :uniq => true
has_many :related_posts, :through => :categories

Post.rb
belongs_to :author
belongs_to :category

Category.rb
has_many :posts

誰かがこれを処理するためのベストプラクティスの方法、または動作するRails3プラグインを推奨できますか?

ありがとう!!

4

3 に答える 3

7

これはRails3.1に組み込まれています:http://asciicasts.com/episodes/265-rails-3-1-overview

于 2011-06-03T22:34:14.687 に答える
0

Rails 3(テストされていない、最も関連するカテゴリが最初の投稿による注文):

category.rb:

class Category < ActiveRecord::Base
  class << self
    def posts
      Post.joins(:categories).
           where(:categories => select('id').all.map(&:id)).
           group('posts.id').
           order('count(*) DESC')
    end
  end
end

使用法:

related_posts = author.categories.posts
于 2011-02-14T17:04:26.980 に答える
0

has_many:related_postsの部分でもっと混乱しています。分類された投稿を本質的に結合しようとしていますか?同様に、「x」カテゴリのすべての投稿は「関連」と見なされますか?もしそうなら、これはRelatedPostクラスがないことに基づいて機能しないので、これを最低限修正するには、関連付けに:class_nameを指定する必要があります。

has_many :related_posts, :class_name => 'Post', :through => :categories

しかし第二に、それはおそらく最初から正しいアプローチではありません。作成者はすでにauthor_id外部キーを介してhas_manyの投稿を行っているため、カテゴリテーブルを元に戻そうとしても意味がなく、代わりにグループ化ロジックを使用します。

これをクリーンアップする代替アプローチ:

Author.rb

has_many :posts do
  def related
    all.group_by(&:category_id)
  end
end
author.posts.related
=> OrderedHash

もちろん、それがあなたが達成しようとしていたことでなければ、これはすべて議論の余地があります。:P

于 2010-09-15T03:12:44.803 に答える