2014-01-28 106 views
0

如果我有以下關係:獲取用戶的帖子最近的帖子評論最多下令

User 
has_many :posts 

Post 
has_many :comments 
belongs_to :user 

Comment 
belongs_to :post 

如何獲得用戶的帖子將每個帖子最近的評論有序?我正在使用Rails和Postgres。理想情況下,我想用連接來做到這一點。

回答

1

從長遠來看,您可能會發現在創建評論時更新了Post對象的updated_at會更容易和更高效。如果你不喜歡這個想法,你可以添加一個comment_added_at屬性,並改爲更新。

這是很容易實現與對孩子的關聯:touch選項:

Comment 
belongs_to :post, :touch => true # This will update the Post.updated_at attribute 
belongs_to :post, :touch => :comment_added_at # This updates the specified attribute instead 

然後,你可以簡單地爲了通過:updated_at:comment_added_at和保存遞歸查詢數據庫。

如果你真的想與聯接,試試這個做到這一點:

User.find(1).posts.joins(:comments).order('comments.created_at desc').group(:id) 
+0

我喜歡comment_added_at方法。使用updated_at將無法正常工作,因爲編輯的帖子會在最近發表評論時顯示。感謝您的回覆。 – ckarbass

+0

值得注意的是':touch'方法也會在編輯/刪除註釋之後更新帖子。如果這是不可取的,你可以使用after_create回調來更新父代。 – Jon

+0

我的設想很有意思,對我來說這不是問題,但值得爲其他人指出。我仍然有興趣瞭解如何通過連接來完成此操作。暫時擱置接受一個答案。 – ckarbass

0

我有這個在我的應用程序已經通過它在我的主頁上列出的最新職位排序。也許它會幫助你設置帖子最近評論的順序。

@posts = Post.select([:ID,:標題])。爲了( 「created_at DESC」)的限制(6)

您可能需要做一些喜歡以下,但不知道這是否將非常適合你。

@posts = post.comments.select。([:ID,:標題])順序( 「created_at DESC」)的限制(6)

0

可以使用下面的代碼作爲參考:

User.includes(:comments).where("posts.user_id =? ", post_owner_user_id).order("comments.created_at desc") 

我希望它會給你想要的結果。

相關問題