获取用户所有帖子的likes.size

时间:2014-01-16 23:19:13

标签: ruby-on-rails activerecord ruby-on-rails-4 associations

好的,<%= @post.likes.size %>很简单。但是如何获得用户创建的所有帖子<%= @user.posts.likes.size %>抛出:

undefined method `likes' for #<ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_Post:0x69c9198>

模型/ user.rb

has_many :likes, foreign_key: "liker_id", dependent: :destroy
has_many :liked_posts, through: :likes, source: :liked

模型/ post.rb

has_many :likes, foreign_key: "liked_id", dependent: :destroy
has_many :liker_users, through: :likes, source: :liker

模型/ like.rb

belongs_to :liker, class_name: "User"
belongs_to :liked, class_name: "Post", :counter_cache => :likes_count
validates :liker_id, presence: true
validates :liked_id, presence: true

请注意,使用上述模型<%= @user.likes.size %>会返回此用户喜欢的帖子数量,而不是帖子上喜欢的内容。

3 个答案:

答案 0 :(得分:1)

这应该这样做:

@user.posts.joins(:likes).count

答案 1 :(得分:0)

Post.joins(:likes).where("likes.user_id = ?", user.id).count

答案 2 :(得分:0)

除了低级答案之外,高级答案是......

User.has_many :posts
Post.has_many :likes
User.has_many :likes, through: :posts

这样,仅仅@user.likes.count就可以将单个用户的整个粉丝俱乐部加起来。

低级答案很有用,并说明了有用的技巧。这个答案是“更好的”,因为它是DRY,并且它在视图中最小化<% code %>。那真是太重要了!