簡體   English   中英

按關聯模型的 created_at 排序

[英]order by created_at of associated model

我正在使用 Rails 制作一個非常簡單的論壇(更多的是體驗而不是實際生成生產就緒代碼),我想知道如何實現一個通用功能。

在topics_controller的索引中,如果我執行以下操作,最近的主題將位於主題列表的頂部。

主題控制器.rb

def index

@topics = Topic.all.order("created_at DESC")

end

但是,我希望按照他們最近的帖子對主題進行排序。 當用戶創建一個新主題時,他們需要為該主題創建第一篇文章,所以如果我能弄清楚如何按最近創建的文章對主題進行排序,那么這將解決所有問題。 例如,如果“昨天的主題”剛剛添加了新帖子,昨天創建的主題(“昨天的主題”)可能仍放置在今天創建的主題(“今天的主題”)之上。

在模型中,

Topic.rb
has_many :posts

Post.rb

belongs_to :topic

請注意,我確信在 Rails 中有一種方法可以做到這一點,但因為我確信在數據庫中進行排序會更快,我想知道是否有一種方法可以在數據庫中進行排序。 但是,如果您只知道 Rails 解決方案就好了。

將您的關聯更新為

belongs_to :topic, touch: true

然后每個新帖子都會更新相關主題的updated_at

引用自Rails 指南

如果您將:touch選項設置為true ,則每當此對象被保存或銷毀時,關聯對象上的updated_atupdated_on時間戳將設置為當前時間。

由於主題似乎不太可編輯且大部分可讀,因此將 touch: true 添加到帖子 -> 主題關聯會更容易。 在這種情況下,rails 將在每個獲得新帖子的主題上更改 updated_at。 之后,只需使用 Topic.order(updated_at: :desc) 來獲取最新消息 - 昨天的帶有今天最新評論的主題將領先於在這些評論之前發表的今天的主題。 另一種方法 - 將帖子加入主題,按創建的最大帖子分組和排序。 不過會比較慢。 另外,不要忘記分頁 - Topic.all 不是什么好事,可能你知道這一點,但以防萬一

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM