基本的に、FacebookやStackoverflowのような通知を作成します。具体的には、投稿コメントシステムでは、投稿にコメントが付けられると、関係するすべてのユーザー(投稿を作成し、コメントを作成した人。ただし、新しいコメント投稿者を除く)は、この投稿にコメントが付けられたことを示す通知メッセージを受け取ります。そして、人々がそれを読んだとき、通知は却下されます。
私はmailboxer gemを使用して実装しようとしましたが、残念ながらsocial_stream自体を含む、関連するメソッドを使用して使用できる例はありません。
通知システムを作成する他の方法はありますか?
そして、最初から作成しようとすると、いくつかの問題が発生します。
Model Notification
topic_id: integer
user_id: integer
checked: boolean #so we can tell whether the notification is read or not
ユーザーが通知のインデックスにアクセスした後、すべての通知メッセージの "checked"属性をtrueにする必要があるだけだと思います。(NotificationsController内)
def index
@notifications=current_user.notication.all
@notification.each do |notification|
notification.checked = true
end
@notification.save!
end
2.通知するユーザーを選択する(そして新しいコメントをするユーザーを除外する)
クエリを作成する方法がわからない...
3.通知の作成
これは次のようなものになると思います
#in CommentController
def create
#after creating comments, creat notifications
@users.each do |user|
Notification.create(topic_id:@topic, user_id: user.id)
end
end
しかし、これは本当に醜いと思います
上記の3つの問題に答える必要はありません。通知システムの簡単な解決策が望ましいです。
私はあなたが正しい道にいると思います。
少し良い通知#インデックス
def index
@notifications = current_user.notications
@notifications.update_all checked: true
end
このユーザーに通知
User.uniq.joins(:comments).where(comments: {id: @comment.post.comment_ids}).reject {|user| user == current_user }
@コメントの投稿コメントに参加したユニークユーザーは、current_userを拒否(結果から削除)します。
パブリックアクティビティと呼ばれるすばらしい宝石があります。好きなようにカスタマイズできます。railscastでスクリーンキャストをご覧ください http://railscasts.com/episodes/406-public-activity あなたを助けることができます。
私のRailsアプリケーションで、私はあなたのような同様の通知システムを作成して、すべてのユーザーに通知を送信しましたが、インデックスアクションではユーザーが使用できます
current_user.notifications.update_all(:checked=>true)
また、誰かが投稿にコメントしたことをユーザーに1回だけ通知するために、unique_byメソッドを使用できます。
@comments [email protected]_by {|a| a[:user_id]}
その後、以前のコメントのユーザーにのみ通知を送信できます
@comments.each do |comment|
comment.user.notifications.create!(....
end
お役に立てば幸いです