Rails에 사용자 추적 기능 설치(Ajax 사용)①

13037 단어 followAjaxRubyRails

뭐 공부 해요?


Rails 과제를 수행하고 있습니다.User 추적 기능
이 기능은 이전에 설치된 적이 있는데, 확실히 그 연관이 어려운 녀석을 기억해라.
가끔은 이 기능의 설치를 알려줄 기회도 있기 때문에 잘 가르쳐 주기 위해 절차를 상세히 기술하기로 했습니다.
다만, 상당히 긴 문장이 되었기 때문에 앞뒤로 나뉜다.이 글에서 우리는 DB 디자인과 관련된 것을 토론할 것이다. 다음은 다음과 같다.
Rails에 사용자 추적 기능 설치(Ajax 사용)②
또한 실행 환경은 다음과 같다.
  • Rails 5.2.3
  • Ruby 2.6.0
  • 종점


    이번에 제작된 것은 사용자의 추적 기능이다.버튼을 눌러 사용자를 추적하고 버튼을 한 번 더 누르면 추적을 해제할 수 있습니다.

    또한 이 기능을 위한 모델은 다음과 같다.

    그것의 형태는 너무 신비롭다.
    갑자기 상술한 모델에 도달하기 어려워 하나하나 따져 보았다.
    그리고 다음은 시종일관'나는 이렇게 생각한다'는 생각입니다. 사람에 따라 다른 생각이 더 어울릴 수 있습니다.

    실시


    분해 사고


    우선'사용자'와'팬'같은 등장인물을 만드는 것은 이해하기 쉽다User모델을 (머릿속에서)UserFollower모델로 분해한다.

    그 중에서 가장 간단한 사용자가 많은 사람들의 상황을 주목하는 것을 고려해 보자.

    이 경우 User 모델에 대해
    has_many: followings, through: :relationships
    
    의 연관성.하지만 사용자 모델 = Follower 모델을 기억하십시오.
    상술한 관계는 이전 파일로 표시한다.
    db/migrate/XXXXXXXX_create_relationships.rb
    class CreateRelationships < ActiveRecord::Migration[5.2]
      def change
        create_table :relationships do |t|
          t.references :user
          t.references :follower, foreign_key: { to_table: :users }
    
          t.timestamps
    
          t.index [:user_id, :follower_id], unique: true
        end
      end
    end
    
    followers 테이블이 실제로 존재하지 않으므로 foreign_key: { to_table: :users } 에서 "follower를 찾을 때 users 테이블(의 follower_id)을 보라"고 Rails에 알려 줍니다.
    이 부근의 설치,↓이 글은 매우 참고 가치가 있다.
    마이그레이션에서 인용표 이름을 자동으로 추정할 수 없는 열을 외부 키로 지정하는 방법
    또 같은 사람이 두 번 미행하지 않도록
    t.index [:user_id, :follow_id], unique: true
    
    user_id열과 follower_id열의 조합은 중복값을 허용하지 않는 제한이 있습니다.

    연관 설명


    사용자 모델


    이때 User 모델의 관련 설명은 다음과 같다.
    models/user.rb
    class User < ApplicationRecord
      has_many :relationships, dependent: :destroy
      has_many :followings, through: :relationships, source: :follower
    end
    
    요점은 다음과 같다.
  • has_many :followings, 더하기연관 별칭
  • source: :follower 중, follower Rails에 모델 보기
  • 좀 복잡해졌네...
    어려워 보이는 부분도 링크를 붙였으니 하나씩 읽어주세요.
    그런데Follower모델이 없는데Follower모델을 어떻게 참조하나요?이 점에 관해서는 아래Relationship 모델의 관련을 보십시오.

    관계 모델

    Relationship모델의 기재 내용은 다음과 같다.
    models/relationship.rb
    class Relationship < ApplicationRecord
      belongs_to :follower, class_name: 'User'
    end
    
    이러한 기록을 통해 Follower 모델의 참조가 도착한 후User Rails 참조 모델에 대해 알려 줍니다.

    별말:source와class_name 차이 정보


    그런데 아까 source에서 다른 모델을 참조했는데 이번에는 왜class_name일까요?생각 못했어?내 생각엔
    이유가 여기에 적혀있어요.
    Rails: difference between :source => ?? and :class_name => ?? in models

  • source ... has_many :****, through: :**** 사용 시

  • class_name ... has_many :*** 사용 시
  • 그래 몰라!!

    확인


    여기서, 나는 당신이 관련성이 이미 정의되었는지 확인하는 것을 건의합니다.그렇게 확인했습니다.
    $ rails c
    > user = User.first
    > user.relationships
    # => []
    > user.relationships.create!(follower_id: 2)
    # => Relationship のレコードが表示
    > user.followings
    # => フォローしているUser(user_idが2のユーザー)のレコードが表示
    
    추적 중인 사용자의 기록을 호출했기 때문에 id:1 사용자는 id:2 사용자를 추적할 수 있다고 할 수 있습니다.

    반대의 관계도 생각하고.


    그렇다면 이번 사용자들은 많은 팬들의 관심을 받고 있다. 나는 방금 상반된 상황을 고려해 보고 싶다.
    우선 종점이지만 아까 반대의 화살표를 정의할 수 있다면 좋겠다.
    그림에 구체적으로 써 보세요.
    followeruser을 통해 많은relationships을 가지면 이런 그림이 완성된다.
    그러나 Follower 모델은 실제로 존재하지 않고 사용자 모델과 비슷하다.
    따라서 주어를 사용자로 바꾸어 보십시오.
    User통과relationships를 통해 많은 것을 가지고 있다followers.
    언어로 이해하기 쉽지만 이번에는 머릿속에서 만들어진 Follow 모형이 거추장스러워졌다.followers표를 놓았기 때문에 고려하기 어렵기 때문에 Follow모델과 User모델을 하나로 정리했다.

    처음에 제시한 ER 그림에 가까워졌네요.
    그나저나 아까 빨간색 화살표도 부활을 시도했어요.
    그렇다면 이번에는 through: :relationships 부분에서 이름이 중복된 것을 볼 수 있다.

    그래서 이번에는 한 측의 이름을 바꾸었고 user 추적당하는 의미에서 follower 라고 명명했다.
    이제 첫 번째 ER 그림과 동일

    연관 설명


    사용자 모델


    그러면 우리는 실제 모델에서 이런 관계를 나타낼 것이다.
    우선passive_relationships모델은 이렇다.
    models/user.rb
    class User < ApplicationRecord
      has_many :relationships, dependent: :destroy
      has_many :followings, through: :relationships, source: :follower
    
      has_many :passive_relationships, class_name: 'Relationship', foreign_key: 'follower_id', dependent: :destroy # 追記1
      has_many :followers, through: :passive_relationships, source: :user # 追記2
    end
    
    굉장히 복잡해졌네요하나하나 읽으면, 우선 1부 추서
  • User많습니다User.
  • 이때 참조하고자 하는 반은 passive_relationships 이다.
  • 외키로 사용Relationship.
  • 나타내다
    이어서 2부
  • follower_id 많음User, 통과followers.
  • passive_relationships 이전의 정의에 따라 인용passive_relationships류.
  • 너무 복잡해서 배고파 죽겠어요.
    차근차근 열심히 쓰려고 하니까 잘 읽어보세요

    신뢰성 모델


    마지막으로 Relationship、모델에서 추론한 내용을 소개한다.
    models/relationship.rb
    class Relationship < ApplicationRecord
      belongs_to :user # 追記
      belongs_to :follower, class_name: 'User'
    end
    
    이것은 오히려 너무 간단하고 걱정스러운 수준이지만 완성되었다

    확인


    여기서 확인해봐.방금 컨트롤러에서 id:1의 사용자가 id:2의 사용자를 추적하는 데이터를 만들었기 때문에 id:2의 사용자는 id:1의 사용자에 의해 추적되어야 합니다.
    콘솔에서 그거 해볼게요.
    $ rails c
    > user2 = User.second
    > user2.followers
    # => id:1のUserのレコードが表示される
    
    user2를 팔로우한 사용자!!성공

    to be contenued ...


    이제 드디어 뷰와 컨트롤러를 실시할 거예요!...되다
    여기서 다음을 계속해.
    설마 나오는 건 아니겠지!이렇게 생각하는 사람은 상대할 수 없다.다음에 나와...
    ▶ 이 이야기의 속편은 여기에 있다
    Rails에 사용자 추적 기능 설치(Ajax 사용)②

    좋은 웹페이지 즐겨찾기