0

我想收集所有帖子在哪里created_at <= Time.nowstatus = 0dislikes < 3created_atandstatus是表中的Post列,但是Dislike是它自己的表。如何访问查询中的不喜欢数量(Post并且Dislike通过 has_many “连接”)?

我现在有这个,它的工作原理:

@posts = Post.where("created_at <= ? AND status = ?", Time.now, 0).order("created_at DESC")

如何在查询中包含不喜欢的数量?

(不喜欢表由:post_id和组成:user_id,我可以通过写来获得帖子上不喜欢的数量@post.dislikes.count

4

1 回答 1

1

至少有两种方法可以达到目标:

having在您的查询中使用

@posts = Post.joins(:dislikes).
  where("posts.created_at <= ? AND posts.status = ?", Time.now, 0).
  group("posts.id").
  order("posts.created_at DESC").
  having("COUNT(dislikes.id) < 3")

使用计数器缓存列(在RailsCasts中描述)

@posts = Post.
  where("created_at <= ? AND status = ? AND dislikes_count < ?", Time.now, 0, 3).
  order("created_at DESC")
于 2013-09-27T12:15:03.680 回答