2009-06-26 59 views
1

我的webapp已註冊用戶,它也有文章,博客文章,流言蜚語。 對於所有這些資源,我已經在下面列出了一個多態註釋模型。在rails中向用戶發送評論通知?

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_type,commentable_id和USER_ID(誰通知應是否存在與匹配commentable和用戶創建的任何新的評論發送?

哪有我實現了Comment和Notification之間的關聯?對於檢查部分,如果有任何一個訂閱了特定的可評論資源,則創建一個帶有after_create掛鉤的CommentObserver以初始化搜索並在存在任何匹配記錄時發送通知。我很困惑這個關聯,模型,控制器和視圖是怎麼實現的?他的評論模型已經是多態的,我可以創建通知模型爲多態嗎?

回答

6

無需插件即可輕鬆完成此操作。 創建數據庫表以存儲帖子的用戶通知訂閱。然後,每次創建評論時,查詢數據庫並使用ActionMailer發送電子郵件到所有用戶的地址。

1

第一步是創建一個新的模型和控制器的通知

$ 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 

最後要做的就是創建一些視圖。你可以做任何你想做的事

相關問題