3

ユーザーが別のユーザーにプライベート メッセージを送信できるメッセージング モデルを作成しました。ただし、ユーザーが新しいメッセージを受け取ったことをユーザーに通知する方法がわかりません。誰かがこれを行う方法を持っていますか? または簡単な解決策があった場合は?

    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

プライベート メッセージが送信されたことを送信者に伝えることはできますが、新しいプライベート メッセージが作成されたことを受信者に通知する方法がわかりません。

助けていただければ幸いです。ありがとう = )

4

2 に答える 2

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 関連付けオプションについては、こちらを参照してください。

于 2012-04-23T23:31:06.727 に答える
1

受信者に通知する方法はいくつかあります。電子メール通知を送信するワーカー プロセスを作成したり、サイトに受信トレイを追加して、誰かが待機しているメッセージの数を表示したりできます。

受信者に「フラッシュ」メッセージを表示することもできます。これを行うには、たとえば、通知がまだ配信されていない未読メッセージがあるかどうかを確認するコードを基本テンプレートに含めます。存在しない場合は何も起こらず、存在する場合は通知が表示され、通知が表示されたという事実が記録されるため、2 回目に表示されることはありません。

于 2012-04-23T22:59:23.513 に答える