簡體   English   中英

Rails-新聞提要

[英]Rails - News Feed

好了,這是我在StackOverflow上曾經問過的最棘手的問題。

我的Web應用程序允許創建文檔。 該文件自動保存,可以說幾秒鍾。

同時,我希望有一個新聞提要讓用戶知道朋友在做什么。 所以我創建了一個觀察者模型,after_create創建了一個news_feed類型的項目。

問題是該觀察者現在將在保存時創建news_feed,這是一個巨大的任務。

因此,我想這樣做,以便該模型的news_feed僅每個會話或每X分鍾注入一次。 因此,我在模型中添加了last_feeded_at列。

問題是,當我嘗試更新觀察者中的該字段以將其標記為已饋送時,會觸發觀察者,這使所有事情一團糟。

處理此問題的最佳方法是什么? 我願意接受所有明智的建議。

謝謝

我不會為此向文檔模型添加屬性。 您可能已經有了類似的東西:

class Document
  has_many :news_feeds, :order => 'created_at DESC'
end

在您的回調中(在Document模型中),只需檢查最后一個news_feed的創建時間即可:

after_save :create_news_feed, :if => Proc.new { |doc| doc.news_feeds.first.created_at <= 10.minutes.ago }

如果最后一個news_feed是在至少10分鍾前創建的,則只會調用create_news_feed

我認為當用戶完成編輯后,他們將執行最終保存? 定義一個attr_accessor草稿,當處理request.js ajax保存時,它作為參數從控制器發送。 我認為確實不需要觀察員。 只需將其放入模型中即可。

attr_accessor :draft
after_save :log_unless_draft

def log_unless_draft
  unless draft.eql?(true)
    log_event.new(...

順便說一句,我不明白為什么after_create甚至會觸發,因為這些不是new_record的第一次保存。

我會使用這種邏輯創建您的NewsFeed對象

def find_or_create_feed
  if session[:news_feed].nil?
    NewsFeed.new
  else
    NewsFeed.find(session[:news_feed])
  end
end

這樣,您可以為整個會話返回相同的NewsFeed對象。 如果您想要花哨並過期,請定期掃描news_feeds表以刪除給定年齡的提要。

暫無
暫無

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

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