2013-09-27 106 views
0

我想收集所有帖子,其中created_at <= Time.now,status = 0dislikes < 3created_atstatusPost表中的列,但Dislike是它自己的表。如何访问查询中的不满量(PostDislike通过has_many“连接”)?Rails:带关联的查询?

我现在都这样了,它的工作原理:

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

我怎么能不喜欢包括在查询量?

(厌恶表包括:post_id:user_id,我可以通过写@post.dislikes.count得到后不喜欢的量)

回答

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") 
+0

无法正常工作。我在问题中增加了一些额外的细节。 – allegutta

+0

尝试为'created_at'('posts.created_at')使用表名。你能提供第一个例子的执行结果吗? – ck3g

+0

好吧,用'posts.'尝试。结果如下:'ActiveRecord :: StatementInvalid:PGError:ERROR:column“posts.id”必须出现在GROUP BY子句中或用于聚合函数中 LINE 1:SELECT“posts”。* FROM“posts”INNER JOIN“dislikes”ON“disl ... – allegutta