Rails:查询与关联?

时间:2013-09-27 12:03:52

标签: ruby-on-rails

我想收集created_at <= Time.nowstatus = 0dislikes < 3的所有帖子。 created_atstatusPost表中的列,但Dislike是其自己的表。如何通过has_many访问查询中的不受欢迎程度(PostDislike已“关联”?

我现在有这个,它有效:

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

如何在查询中包含不喜欢的内容?

(Dislike表格由:post_id:user_id组成,我可以通过撰写@post.dislikes.count来获取帖子中的不喜欢数量

1 个答案:

答案 0 :(得分: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")