2013-10-12 111 views
0

我正在用Rails製作一個非常裸露的骨骼論壇(更多的是體驗,而不是實際生產現成的代碼),我想知道如何實現一個共同的功能。通過關聯模型的created_at排序

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

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解決方案就沒問題。

回答

1

更新您的關聯

belongs_to :topic, :touch => true 

比每一個新的職位將更新的話題updated_at

:觸摸

如果爲true,關聯的對象會感動(中的updated_at /上現在設置屬性)時,這個記錄可以保存或銷燬。如果您指定了一個符號,那麼除了updated_at/on屬性之外,該屬性將使用當前時間進行更新。

(參見:http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/belongs_to

+1

感謝。這很容易。然而,爲了讓讀者明白這個答案,我現在通過'@topics = Topic.all.order(「updated_at DESC」)更新來訂購' – BrainLikeADullPencil

+3

這實際上是一種非常糟糕的方式。任何時候一個主題被更新,例如重命名它,它會彈出到列表的頂部。 –

+0

致敬:我同意這會導致父對象的更新,這可能會對應用程序的性能產生影響。 *但*:這是[Rails Guide]推薦的(http://edgeguides.rubyonrails.org/caching_with_rails.html#russian-doll-caching),當你想使用俄羅斯玩偶緩存策略時,這是很重要的。 – spickermann

相關問題