Rails의 다중 모드 연결 이해

6562 단어 폴리모피크Rails

이것은 무엇입니까?


Rails 과제를 수행하고 있습니다.폴리모피크 연관을 사용하라는 지정이 있었지만'폴리모피크 연관이 무엇인지'를 이해하지 못해 배운 것을 노트에 정리하기로 했다.
또한 해당 Rails 버전은 5.2.3 입니다.

개요


polymorphic는'다형적, 다형적'이라는 뜻으로 학술 분류에서 자주 사용하는 단어인 것 같습니다.
Rails Guide에 따르면 다중모드적 관련성은 무엇입니까
하나의 연관을 통해서만 하나의 모델이 여러 개의 다른 모델에 속한다는 것을 나타낼 수 있습니다
...연관성
다중모드belongs_to는 다른 모델에서 얻을 수 있는 인터페이스를 설정한 성명으로도 여겨질 수 있다.
그렇다고 합니다.
또한 근거설치할 때 참고한 이 문장
이처럼'서로 다른 것은 고정된 행위/입력과 출력이 있어 똑같이 처리할 수 있다'고 오리구이 타자라고 불린다.그런 다음 [고정된 동작] [입출력의 정의]를 인터페이스라고 합니다.
그렇다고 합니다.

ER 그림


구체적인 코드를 보고 싶습니다.
이번에는 사용자에 대한 알림 기능이 설치되었다.로그인 중인 사용자가 자신에게
  • 자신이 추적당했을 때
  • 자신의 투고가 좋을 때
  • 자신의 투고에 대한 평론이 있을 때
  • 에서 설명한 대로 해당 매개변수의 값을 수정합니다.
    그림으로 표현하면 이런 느낌이에요.

    예를 들어 commentsactivities 사이에는 ER 그림의 선이 없지만 comment.activity 형식으로 comments 에서 activities 의 실례를 얻을 수 있다.
    실제로 유선이 없는 곳에서도 자유롭게 연락할 수 있을 것 같다는 게 polymorphic(多形性の、多型の) 이름의 유래죠.

    옮기다


    우선 이전부터 제작한다.실제 제작의 이전은 다음과 같다.
    class CreateActivities < ActiveRecord::Migration[5.2]
      def change
        create_table :activities do |t|
          t.references :user, foreign_key: true
          t.references :subject, polymorphic: true
          t.integer :action_type, null: false
          t.boolean :read, null: false, default: false
    
          t.timestamps
        end
      end
    end
    
    subject 열의 polymorphic: true 옵션은 점입니다.
    Rails Guide에도 reference형이 아닌 이동의 묘사법이 기재되어 있지만 여기가 좀 복잡해서 이번에 reference형으로 바뀌었다.

    구체적인 코드 (연결)


    연관은 다음과 같이 정의됩니다.또 다중모드와 관련이 없는 기재를 제외하고는
    class Activity < ApplicationRecord
      belongs_to :subject, polymorphic: true
    end
    
    class Comment < ApplicationRecord
      has_one :activity, as: :subject, dependent: :destroy
    end
    
    class Like < ApplicationRecord
      has_one :activity, as: :subject, dependent: :destroy
    end
    
    class Relationship < ApplicationRecord
      has_one :activity, as: :subject, dependent: :destroy
    end
    
    예:
    $ rails c
    > comment = Comment.first
    > comment.activity
    => nil # activityのインスタンスがあればそれが表示される
    
    에서 설명한 대로 해당 매개변수의 값을 수정합니다.그리고 아직 activity의 실례가 없기 때문에 표시할 수 없습니다.
    > a = Activity.first
    > a.subject
    # => comment や like や relationship のインスタンスが取得可能
    
    ...유형의 여러 유형 매개 변수를 가진 착색기의 컴파일러에서 발생할 수 있는 고장입니다.
    또한 부류as: xxxx에 지정된 명칭은 activity(子クラス)에서 부류(이번 상황에서comment,like,relationship)의 실례를 얻을 수 있다.
    복잡하니까 틀리지 말자고
    이번에는 이걸로'알림 기능'을 만들었는데 그쪽 코드가 기재되면 기사가 길어지기 때문에 자세한 내용은 다음 기사에 넘기고 싶어요
    [추기] 다음 기사 여기 있습니다!
    polymoffic와 관련된 기사를 소개합니다!
    https://spice-factory.co.jp/development/has-and-belongs-to-many-table/

    좋은 웹페이지 즐겨찾기