我创建了一个消息传递模型,用户可以将私人消息发送给另一个用户。但我不知道如何通知用户他/她得到了一条新消息。有没有人有办法去做这个?或者是否有一个简单的解决方案?
def create
@message = current_user.messages.build
@message.to_id = params[:message][:to_id]
@message.user_id = current_user.id
@message.content = params[:message][:content]
if @message.save
flash[:success ] = "Private Message Sent"
end
redirect_to user_path(params[:message][:to_id])
end
我可以告诉发件人已发送私信,但我不知道如何通知收件人新的私人消息已被创建。
帮助将不胜感激。谢谢=)
答案 0 :(得分:4)
首先,您可以像这样改进您的控制器:
def create
@message = current_user.messages.new(params[:message])
if @message.save
flash[:message] = "Private Message Sent"
end
redirect_to user_path(@message.to_id)
end
然后,在你的模特中:
# app/models/message.rb
class Message < ActiveRecord::Base
belongs_to :user
belongs_to :recipient, class_name: 'User', foreign_key: :to_id
has_many :notifications, as: :event
after_create :send_notification
private
def send_notification(message)
message.notifications.create(user: message.recipient)
end
end
# app/models/user.rb
class User < ActiveRecord::Base
has_many :messages
has_many :messages_received, class_name: 'Message', foreign_key: :to_id
has_many :notifications
end
# app/models/notification.rb
class Notification < ActiveRecord::Base
belongs_to :user
belongs_to :event, polymorphic: true
end
此Notification
模型允许您存储用户针对不同“事件”的通知。您甚至可以存储是否已读取通知,或设置after_create
回调以便向通知的用户发送电子邮件。
此Notification
模型的迁移将是:
# db/migrate/create_notifications.rb
class CreateNotifications < ActiveRecord::Migration
def self.up
create_table :notifications do |t|
t.integer :user_id
t.string :event_type
t.string :event_id
t.boolean :read, default: false
t.timestamps
end
end
def self.down
drop_table :notifications
end
end
您可以阅读有关Rails关联选项here的信息。
答案 1 :(得分:1)
有多种方法可以通知收件人。您可以拥有一个发送电子邮件通知的工作进程,或者在您的网站上包含一个“收件箱”,显示有人等待的邮件数量。
您还可以向收件人显示“闪烁”消息。您可以通过例如在基本模板上包含一些代码来检查是否存在尚未发送通知的未读消息;如果没有,则没有任何反应,如果有,则显示通知,并记录显示通知的事实,以便第二次不显示。