2016-02-25 125 views
1

比方說,我有兩個型號:活動記錄查詢對象

class Post < ActiveRecord::Base 
    has_many :comments 
end 

class Comment < ActiveRecord::Base 
    belongs_to :post 
end 

然後假設我已經創建了2個職位,每3點意見。我可以通過查詢這兩個帖子的AR關係來獲取屬於這兩個帖子的所有評論嗎?

我可以這樣做:

@posts = Post.where(id: [1,2]) 
@comments = [] 
@posts.each do |post| 
    @comments += post.comments 
end 

但後來它不是一個AR的關係,再加上看起來這應該是一個簡單的查詢。

有什麼像@posts.comments

+0

我想這是很簡單的東西,但無法找到對interwebs簡單..:/ –

回答

1

你的問題是關於「屬於那兩個職位」,但你建議使用Post.all,所以你不清楚你是否在所有帖子的評論之後,或者只是這兩個。

以下是如何獲得這兩個職位的評論,說他們的ID是12

Comment.where post_id: [ 1, 2 ] 

...但如果你不知道的ID,那麼你可以使用任何你喜歡的查詢返回的職位你有興趣創建一個子選擇,如:

Comment.where post: Post.where(owner: owner) 
Comment.where post: Post.where("title LIKE ?", "%abc%") 

或者您可以使用從註釋聯接後,像這樣:

Comment.joins(:post).where(posts: { owner: owner }) 

所以有一些選擇可以做我認爲你所要求的。

+0

對不起,我真正要求的是有'post'關係的'.comments' –

+0

雖然這很有幫助,謝謝! –

+0

'Comment.joins(:post)'是最接近的東西,從概念上來說''發佈' – smathy

0

有沒有可以通過Post.all調用的查詢來獲取屬於這兩個帖子的所有評論?

如果你只是想獲得屬於後所有評論做到這一點

Comment.where.not(post_id: nil) 
+0

'.comments'取決於你的數據庫限制,它可能仍然更好'Comment.joins(:post)',in情況下,在「評論」中有懸掛鍵被刪除的帖子 – smathy