1

在這個問題上我已經得到了數據庫的兩個表:如何將新聞源中的項目排序爲last_active_at?

  • 後(的has_many:評論)
  • ActivityFeed(belongs_to的項目,多態)
  • 評論(belongs_to的:後)

假設在Facebook上的組內發生的這些連續動作:

  1. 我們ER甲貼的狀態爲「狀態1」
  2. 用戶B發佈的狀態爲「狀態2」

,然後將這些2個職位中的每一個已經觸發FeedItem(活動)的創建的組。

現在,當用戶加載頁面時,提要活動按照created_at/updated_at進行排序。 供稿活動是一組多種對象(可以是帖子,照片,投票,文件...)。

如果在第二時刻用戶A評論的用戶B的柱,用於進給正確的順序現在應該:

  1. 「狀態2」
  2. 「狀態1」

那麼當用戶A對「狀態2」發表評論時會發生什麼?我是否必須找到相關的帖子(添加評論的地方)並更新帖子相關活動的時間戳?

我需要一些建議。謝謝!


UPDATE

class Comment < ActiveRecord:Base 
    belongs_to :post, touch: true 
end 

class Post < ActiveRecord:Base 
    has_many :comments 
    act_as_activity -> on_create will create a Activity representing this object 
end 

class Activity < ActiveRecord:Base 
    belongs_to :item, :polymorphic => true 
    belongs_to :parent, :polymorphic => true 
    belongs_to :user 
end 

因此飼料查詢將查找的活動表,因爲我可以有多種類型的飼料中的對象。和時間戳必須刷新此表時評論過的信息,這是因爲查詢在活動表完成:

SELECT * FROM Activity 
       ORDER BY updated_at 

回答

1

使用bdares的使用after_create回調的想法,它可能看起來像這樣。

class Comment 
    belongs_to :post, touch: true 
    after_create do 
    self.post.activity.last_update_at = Time.now 
    self.post.activity.save! 
    end 
end 

這意味着你通過last_update_at字段排序Activity

+0

我在想什麼與此非常相似。我唯一關心的是性能os寫道。但是我應該在稍後改進。謝謝 – Luccas

3

如果我理解正確,郵政應在「最近」的順序顯示。添加對帖子的評論應該刷新「最近的」時間。

這裏有一些嘗試。有一個名爲:touch的belongs_to關聯選項。通過添加此選項,添加對帖子的評論應該會使帖子中的updated_at字段在關聯中添加(或刪除)註釋時被更新。

http://guides.rubyonrails.org/association_basics.html

例如:

class Comment < ActiveRecord:Base 
    belongs_to :post, touch: true 
end 

class Post < ActiveRecord:Base 
    has_many :comments 
end 

那麼你做你的帖子實例的排序:的updated_at領域。

+1

':touch'選項的存在非常棒。我的第一個想法是'Comment'上的'after_create'鉤子,但功能是內置的! – bdares

+0

感謝您的回答。 Touch很好!你的答案沒有錯,但查詢不在表格中,因爲我可以有多個對象類型。看我的編輯。謝謝! – Luccas

+0

根據您的更新,您如何引用帖子中的活動。在''''Post''''上是否有''''has_one:activity''''或''has_many:activity''''? – GSP

相關問題