1

投稿とコメントのシステムを作成しました。次に、通知システムを追加して、誰かがコメントを書き込むたびに、会話内の各ユーザーに警告します。

私の質問は、このシステムを構築するためのデータベースに関して、どの方法が最適ですか? 次のフィールドを持つ通知テーブルを考えました。

id_notification | sent_by | id_user_receiver | id_post
      1              2             3              10

この例では、ID 2 のユーザーが ID 10 の投稿にコメントを書き、ID 3 のユーザーが通知を受け取ります。しかし、会話に 100 人または 1000 人のユーザーが関与している場合、誰かが会話に書き込みを行うたびに、データベースに 100 人または 1000 人のレコードが残ることになります。正しい方法ではないと思います。より良い解決策は何ですか?

4

2 に答える 2

0

最初のステップは、通知用の新しいモデルとコントローラーを作成することです

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

   $ rake db:migrate
   $ rails g controller Notifications index

これが完了したら、次のステップは has_many :notifications を User、Post、および Comment モデルに追加することです。

これが完了したら、次のコードを Comments モデルに追加します。

       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

最後に、いくつかのビューを作成します。やりたいことは何でもできる

于 2014-12-16T10:56:53.573 に答える