2013-09-27 146 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