Rails计算收藏Post的用户数

时间:2017-01-03 21:29:25

标签: ruby-on-rails ruby activerecord model

相对较新的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

在我的帖子#show视图中,我想调用类似

的内容
<%= @post.favorited.count %> 

并获得已收藏此帖子的用户数量,但它告诉我这是一个未定义的方法。

有什么建议吗?谢谢,

2 个答案:

答案 0 :(得分:2)

@engineersmnky是对的,你也需要在Post上加入关系。

此外,虽然您可以通过加入获取此信息,但它不会让您有效地查询最受欢迎的帖子或在帖子表中包含收藏数量。每次添加或删除收藏时,您都应该使用callbackscounter cache来保留计数。

答案 1 :(得分: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 - 但您应该使用加入或counter caches来避免N + 1查询问题。

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