2016-02-29 88 views
1

尋找一種方式通過閃光消息通知用戶,他們已經獲得了新的證件。通知 - 即時消息,如何到

我每次在這裏說明我觀察設置:https://github.com/merit-gem/merit#getting-notifications

我觀察代碼:

class ReputationChangeObserver 

    def update(changed_data) 
    description = changed_data[:description] 
    flash[:info] = description 
    end 

end 

Rails的抱怨如下:

undefined local variable or method `flash' for #<ReputationChangeObserver:0x0000000586d648> 

我明白,一晃就是基本動作控制器的一部分。但是,我不知道觀察者如何訪問flash或會話,因爲它似乎存在於rails框架之外。

我錯過了什麼?似乎沒有關於如何實現用戶通知(我可以找到)的任何示例或教程。

有人請借他們的智慧嗎?

+0

如果不是使用'grant_on' API,而是使用內聯'add_badge'調用,則可以在控制器或模型中添加邏輯。 – TuteC

回答

0

據我所知,你無法從觀察者那裏訪問flash。您需要以單獨的方式將消息傳遞給網頁上的用戶。例如,在update()方法中,捕獲想要顯示的信息並創建將由控制器使用的活動記錄。您可以設置自己的模型或使用處理活動源的其中一個寶石。

可能有幾種不同的方式來做通知取決於你的使用情況:

  1. 實時通知使用類似:http://railscasts.com/episodes/401-actioncontroller-live?view=asciicast(你可以只發布的數據就在更新()以上,讓用戶使用它)
  2. 在網頁上長時間輪詢以獲取更新:http://railscasts.com/episodes/229-polling-for-changes-revised?view=asciicast
  3. 顯示用戶頁面加載的更新:設置before_action過濾器並檢查用戶是否有新的活動源。如果是,請將其添加到閃存中。

1,2將適合,如果你知道你用戶將停留在一頁上一段時間。例如,如果您的應用程序具有儀表板頁面或時間線頁面(如FB或Twitter)。 如果你知道你的用戶會加載(訪問)很多不同的頁面,但是你的用戶將無法獲得更新,直到頁面被重新加載。

總之,沒有辦法在觀察者中直接將通知推送到閃存。更新發生在後臺並且不知道控制器。您需要存儲(或者在實時更新的情況下發布)更新,並且當用戶加載您的應用程序時,讓您的控制器提取更新以向用戶創建通知。

希望這會有所幫助。