Rails로 알림 기능 만들기(① 기본 기능 편)

11006 단어 통지Rails

한 일


Rails로 애플리케이션을 만드는 과제가 진행 중입니다.알림 기능을 만드는 작업이 있습니다.
처음에 하고 기억하면 응용이 효과적이기 때문에 어떻게 하는지 총괄해야 한다.
또한 실행 환경은 다음과 같다.
  • Rails 5.2.3
  • Ruby 2.6.4
  • 규격


    규격은 아래와 같다.
  • user 추적 중
  • user 투고post 댓글이 있을 때
  • user의 투고 "좋아!"실행 시
  • 상기 조건에 따라 사용자에게 통지를 보내다.

    데이터베이스 디자인


    여기처럼.

    다중 모드 관련을 사용하면 activity.subject 형식으로 Like, CommentRelationship 의 실례를 호출할 수 있다.
    데이터베이스 구조에 대한 상세한 정보는 이 글을 보십시오.
    Rails의 다중 모드 연결 이해
    또한 activities표의 read열을 이용하여 이미 읽은 관리를 하지만 이것은 본 보도가 아니라 다음 보도에서 소개합니다.

    종점


    상기 표 디자인에 따르면'제작activities의 기록은 현재user의 것만 집중하고 그것을 한눈에 보여주는 것'이 이번 목표다.

    알림 기능


    Model


    이번
  • user 추적되었을 때 = > relationships 의 기록이 작성되었을 때
  • user 투고한 post 논평이 있을 때 = > comments 기록이 작성될 때
  • user의 투고 "좋아!"레코드를 작성할 때 = > likes 레코드가 작성될 때
  • ↑ 위와 같은 3개의 동작을 할 때activities의 기록도 동시에 작성할 수 있다.
    그것은 아래의 방법으로 실현되었다.모형 방법에 쓰인 내용을 세 가지로 요약하여 소개하다.
    class Like < ApplicationRecord
      # 中略
      after_create_commit :create_activities
    
      private
    
      def create_activities
        Activity.create!(subject: self, user: post.user, action_type: :liked_to_own_post)
      end
    end
    
    class Relationship < ApplicationRecord
      # 中略
      after_create_commit :create_activities
    
      private
    
      def create_activities
        Activity.create!(subject: self, user: follower, action_type: :followed_me)
      end
    end
    
    lass Comment < ApplicationRecord
      # 中略
      after_create_commit :create_activities
    
      private
    
      def create_activities
        Activity.create!(subject: self, user: post.user, action_type: :commented_to_own_post)
      end
    end
    
    create_activities의 방법은 Like, Relationship, Comment의 실례를 만든 후에 불린다.사용after_create_commit이지만 after_save와 비슷한 리셋이다.그러나 데이터베이스 변경 사항을 제출하기 전에는 터치하지 않는다는 점은 다르다.
    자세한 내용은 참조 Rails Guide의 설명 를 참조하십시오.
    또한 model에도 다중모드적 관련을 정의하는 기술이 각각 첨부되어 있다.보세요앞에서 열거한 이 문장.
    지금 생각해 보니 각 모델create_activities은 개인적인 방법이다. 서로 다른 모델에서 동명의 방법을 사용했기 때문이다...
    (애초에 범본 방법의 사경이었는데, 지금은 다시 한 번 살펴보고 싶다...)
    그러면 이렇게 기본적인 통지 기능이 실현된다.아직 view 없으니까 콘솔에서 실험하면...
    $ rails c
    > user = User.first
    > user.activities
    #=> Activityのインスタンスたちが取得できる
    
    상기 명령을 통해 user와 관련된 알림 그룹을 얻을 수 있습니다.each로 이걸 돌리면 view 으로 표시할 수 있다.

    추적) View에 알림 표시


    보기를 계속합니다.
    규격은 아래와 같다.세 가지 유형의 알림을 클릭하여 다음 페이지로 이동합니다.
  • 자신의 관심 알림 = > 관심 사용자 세부 정보 페이지
  • 자신의 투고에 대한 의견 통지 = > 해당 투고
  • 자신의 투고에 대한 이점에 대한 통지=> 상응하는 투고
  • 각 마이그레이션 목표는 다음과 같이 설정됩니다.(실제로는 모형적인 방법으로 이루어졌지만 문장의 범위 내에서 일하기 위해 조수에 잠시 기재되었다.)
    some_helper.rb
    module SomeHelper
    
      def transition_path(activity)
        case activity.action_type.to_sym
        when :commented_to_own_post
          post_path(activity.subject.post, anchor: "js-comment-#{activity.subject.id}")
        when :liked_to_own_post
          post_path(activity.subject.post)
        when :followed_me
          user_path(activity.subject.follower)
        end
      end
    end
    
    그런 다음 action_type (알림 유형) 과 동일한 뷰를 생성합니다...
    (이곳은 샘플에 1례만 열거됨)
    views/mypage/activities/_liked_to_own_post.html.slim
    = link_to transition_path(activity) do
      object
       = link_to activity.subject.user.username, user_path(activity.subject.user)
      | があなたの
      object
        =link_to '投稿', post_path(activity.subject.post)
      | にいいねしました
      .text-right
        = l activity.created_at, format: :short
    
    controller에서current_user만 모았어요activityapp/controllers/mypage/activities_controller.rb
    class Mypage::ActivitiesController < Mypage::BaseController
      def index
        @activities = current_user.activities.order(created_at: :desc)
      end
    end
    
    view이렇게 움직인다.
    views/mypage/activities/index.html.slim
    - if @activities.present?
      - @activities.each do |activity|
        = render "#{activity.action_type}", activity: activity
    - else
      .text-center
        | お知らせはありません
    
    render에서 호출된 내용은 동적 생성 가능
    위의 내용을 통해 페이지를 다음과 같이 표시할 수 있습니다.

    이상, 간단하지만 사용자에게 통지하는 설정입니다.여기서부터 읽기 관리를 시작합니다.

    좋은 웹페이지 즐겨찾기