2012-07-01 54 views
0

我正在建立一個成就係統,最後一部分是通知用戶。一旦在模型中創建成就after_create模型成就通知

class Achievement < ActiveRecord::Base 

    def self.check_conditions_for(user) 
    if user.month_views >= 30 and !user.views_awarded?(self) 
     user.award(self) 
    end 
    end 
end 

我需要將自定義通知刷新到用戶,然後他們可以關閉。從模型中啓動此功能的最佳方法是什麼?我知道我只能從控制器調用Flash消息,但在這種情況下我需要一個解決方法。它看起來與堆棧溢出顯示徽章非常相似。

+0

當這樣做:

def watch @video = Video.find(params[:id]) @notice = Achievement.check_conditions_for(current_user) respond_to do |format| format.js end end 
在app /視圖/視頻/ watch.js.erb

你計劃'check_conditions_for(user)'?這是預定的工作,還是在用戶點擊URL時發生? – varatis

+0

它最終將成爲後臺作業,但現在它每次創建media_view(視頻視圖)時都會運行 –

回答

2

好吧,如果用戶查看視頻 - 大概會點擊某個網址,則應該在相關操作中調用Achievement.check_conditions_for(user)Achievement.check_conditions_for(user)可以返回一些值 - 可能是通知消息 - 您可以將其作爲普通的Flash消息發送。如果僅在執行某個操作時執行此操作,則不需要此處的解決方法。

舉例來說,如果你有一個控制器Videos和你打電話的動作watch

alert("<%= @notice %>"); 
+0

這可以起作用,唯一的問題是視圖是通過ajax調用創建的,並且沒有重定向。我可以在沒有重定向的情況下添加Flash通知嗎? –

+0

@KyleC查看更新的答案 – varatis