注释通知中轨用户?(Comment notification to users in rails?)

2019-10-16 16:54发布

我的web应用程序已注册用户和它的文章,博客文章,也婆娘。 对于所有这些资源,我有它下面列出的多态Comment模型。

id  content         commentable_id  commentable_type   user_id  created_at  updated_at
1   Frist comment   2               Article            1        ....
2   Second comment  3               Post               2        .....

因此,对于每个commentable资源,我在commentable资源的底部为用户评论已经评论形式。 我想一个复选框,选中时,同时提交的评论,用户应该收到通知,无论是在收件箱或电子邮件地址,因为我们已经有了它用户注册,当其他新的评论后加入。

我想有这样的通知,我可以存储commentable_type,commentable_id和USER_ID(对谁应该通知是否存在与匹配commentable和用户创建的任何新的评论发送一些模式?

我怎样才能实现注释和通知之间的关联? 因为如果有任何一个订阅特定commentable资源的检查部分是创建一个CommentObserver与after_create钩初始化搜索和发送通知,如果有任何匹配记录。

但我很困惑什么关联,模型,控制器和视图看起来像要做到这一点? 由于评论模型已经是多态的,我可以创造通知模式为多态太?

Answer 1:

您可以轻松地做到这一点无需插件。 创建一个数据库表来存储用户通知订阅上岗。 然后,在每次创建一个留言的时候,查询数据库和使用发送电子邮件的ActionMailer到所有用户的地址。



Answer 2:

第一步是创建一个通知一个新的模型和控制器

   $ rails g model Notification  post:references comment:references user:references read:boolean

   $ rake db:migrate
   $ rails g controller Notifications index

一旦做到这一点,下一步就是添加has_many:通知用户,Post和Comment模型。

一旦做到这一点,添加以下代码到注释模式:

       after_create :create_notification

       private

         def create_notification
           @post = Post.find_by(self.post_id)
           @user = User.find_by(@post.user_id).id
             Notification.create(
             post_id: self.post_id,
            user_id: @user,
             comment_id: self,
             read: false
              )
        end

上面的代码中创建一旦创建注释的通知。 下一步骤是编辑通知控制器,以便通知可被删除,并且用户可以将通知标为已读:

       def index
         @notifications = current_user.notications
         @notifications.each do |notification|
         notification.update_attribute(:checked, true)
      end
     end

      def destroy
        @notification = Notification.find(params[:id])
        @notification.destroy
        redirect_to :back
      end

接下来要做的就是建立一个方法来删除评论时被删除的通知:

          def destroy
           @comment = Comment.find(params[:id])
           @notification = Notification.where(:comment_id => @comment.id)
             if @notification.nil?
               @notification.destroy
             end
           @comment.destroy
           redirect_to :back
        end

最后要做的是创造一些看法。 你想做什么,就可以做什么



文章来源: Comment notification to users in rails?