好的,<%= @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 %>
会返回此用户喜欢的帖子数量,而不是帖子上喜欢的内容。
答案 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 %>
。那真是太重要了!