相对较新的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 %>
并获得已收藏此帖子的用户数量,但它告诉我这是一个未定义的方法。
有什么建议吗?谢谢,
答案 0 :(得分:2)
@engineersmnky是对的,你也需要在Post上加入关系。
此外,虽然您可以通过加入获取此信息,但它不会让您有效地查询最受欢迎的帖子或在帖子表中包含收藏数量。每次添加或删除收藏时,您都应该使用callbacks或counter 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