我有以下内容:
models/like.rb
:
class Like
belongs_to :post
end
models/post.rb
:
class Post
has_many :likes, dependent: :destroy
def self.popular
Like.group(:post_id).count << ???
end
end
我想制作一个返回最受欢迎帖子的范围:超过20个喜欢的帖子,但我不知道如何制作条件。
答案 0 :(得分:2)
您可以使用counter_cache执行此操作。您将不得不创建一个额外的列,但在SELECTing时它更具有性能。
models/like.rb
class Like < ActiveRecord::Base
belongs_to :post, counter_cache: true
end
models/post.rb
class Post < ActiveRecord::Base
has_many :likes, dependent: :destroy
def self.popular
where('likes_count > 20').order('likes_count DESC')
end
end
然后创建迁移:
class AddLikesToPosts < ActiveRecord::Migration
def change
add_column :posts, :likes_count, :integer, default: 0
end
end
并在likes_count
上填写rails console
以获取您当前的帖子(仅在您已创建帖子时才需要):
Post.find_each { |post| Post.reset_counters(post.id, :likes) }
在此之后,每次创建新的Like时,计数器将自动递增。