2017-01-03 17 views
0

railsに比較的新しく、特定の投稿を好きにしたユーザーの数を見つけるために、私のモデル関係を並べ替えようとしています。ここに私のモデルは以下のとおりです。レイル数好きな人の投稿数投稿

User.rb

has_many :favorites 
has_many :favorite_posts, through: :favorites, source: :favorited, source_type: 'Post' 

Post.rb

belongs_to :user 
    has_many :favorites 

Favorite.rb私は何かを呼びたい私の投稿#ショービューで

belongs_to :favorited, polymorphic: true 
belongs_to :user 

like

<%= @post.favorited.count %> 

この投稿をお気に入りに登録したユーザーの数を取得しますが、これは未定義の方法であることがわかります。

提案がありますか?

+1

これは 'favorited'は' Post'メソッドではないからです。 @ Post.favorites.count'を試してください。私は 'Post'モデルも' has_many:favorites、as::favorited'を必要としていると信じています – engineersmnky

答えて

0
class User 
    has_many :favorites 
    has_many :favorite_posts, through: :favorites, 
          source: :favorited, 
          source_type: 'Post' 
end 

class Post 
    has_many :favorites, as: :favorited 
end 

class Favorite 
    belongs_to :user 
    belongs_to :favorited, polymorphic: true 
end 

これは@post.favorites.sizeてカウントを取得できるようになる - しかし、あなたはどちらかを使用N + 1つのクエリの問題を回避するために参加したりcounter caches必要があります。

+0

ありがとう!これは動作します! – ETSchmidt

+0

ありがとう!これは動作します! (ただし、「counter_cache:true」を追加すると、サイト内の何もお気に入りになりません – ETSchmidt

1

@engineersmnkyが正しい場合は、Postにも関係を含める必要があります。

さらに、この情報をジョインで取得することはできますが、お気に入りのポストを効率的に検索したり、ポストテーブルにお気に入りの数を含めることはできません。お気に入りが追加または削除されるたびに、callbacksまたはcounter cacheのいずれかを使用してカウントを維持する必要があります。

関連する問題