我可以通过哪些方式在Rails应用程序中实现通知?

时间:2012-02-08 16:21:56

标签: ruby-on-rails-3 notifications queue social-networking

这里最简单的例子就是Facebook通知,例如当有人发布你的状态评论,喜欢你的照片,或者只是向你发送一些游戏邀请时。

在Rails应用程序中实现此功能的方法有哪些,以便通知仅在用户阅读之前显示给用户,并且可能能够在不同平台上读取通知。

我不是在这里谈论使用服务器推送的实时聊天通知,而是在某种方式向用户展示自上次访问网站以来发生的事情。

例如,我读了一篇文章并发表了评论然后有人回复了它。下次登录时,我希望能够看到有人回复了我的评论。

我想到的一个解决方案是使用某种Notification模型,该模型具有read属性,当用户访问该网站时,它会显示当前未读的所有通知

如果没有使用关系数据库,是不是有更好的方法呢?

2 个答案:

答案 0 :(得分:8)

我使用现有的User模型,通过序列化的messages数组。

通过迁移将messages列(TEXT类型)添加到您的用户表中:

add_column :users, :messages, :text, :null => false, :default => "--- []"

然后在user模型中序列化它:

serialize :messages, Array

现在,你可以这样做:

# Add messages
@user.messages.push "You have a new message!"

# Read messages
@user.messages # => ["You have a new message!"]

# Clear one message
@user.messages.delete_at(0)

# Clear all messages
@user.messages.clear

# Get message counts
@user.messages.empty? # => true
@user.messages.count  # => 0

如果您需要包含多个参数(来自主题,重要性)的更详细消息,您可以随时使用散列。

答案 1 :(得分:0)

我的网站上有一个提醒模型。当某些事情发生时,会添加警报,其他用户在登录时会看到警报。重要的是有一个解雇字段,因此用户可以解除警报,因此用户不会一遍又一遍地看到相同的警报。它还有一个区域字段,因此您可以将警报连接到网站的某个部分,它有一个detail_link字段,为用户提供一个链接,他可以点击该链接查看警报的内容。