Rails에 사용자 추적 기능 설치(Ajax 사용)①
뭐 공부 해요?
Rails 과제를 수행하고 있습니다.
User
추적 기능이 기능은 이전에 설치된 적이 있는데, 확실히 그 연관이 어려운 녀석을 기억해라.
가끔은 이 기능의 설치를 알려줄 기회도 있기 때문에 잘 가르쳐 주기 위해 절차를 상세히 기술하기로 했습니다.
다만, 상당히 긴 문장이 되었기 때문에 앞뒤로 나뉜다.이 글에서 우리는 DB 디자인과 관련된 것을 토론할 것이다. 다음은 다음과 같다.
Rails에 사용자 추적 기능 설치(Ajax 사용)②
또한 실행 환경은 다음과 같다.
Rails 5.2.3
Ruby 2.6.0
종점
이번에 제작된 것은 사용자의 추적 기능이다.버튼을 눌러 사용자를 추적하고 버튼을 한 번 더 누르면 추적을 해제할 수 있습니다.
또한 이 기능을 위한 모델은 다음과 같다.
그것의 형태는 너무 신비롭다.
갑자기 상술한 모델에 도달하기 어려워 하나하나 따져 보았다.
그리고 다음은 시종일관'나는 이렇게 생각한다'는 생각입니다. 사람에 따라 다른 생각이 더 어울릴 수 있습니다.
실시
분해 사고
우선'사용자'와'팬'같은 등장인물을 만드는 것은 이해하기 쉽다
User
모델을 (머릿속에서)User
과Follower
모델로 분해한다.그 중에서 가장 간단한 사용자가 많은 사람들의 상황을 주목하는 것을 고려해 보자.
이 경우
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
사용자를 추적할 수 있다고 할 수 있습니다.반대의 관계도 생각하고.
그렇다면 이번 사용자들은 많은 팬들의 관심을 받고 있다. 나는 방금 상반된 상황을 고려해 보고 싶다.
우선 종점이지만 아까 반대의 화살표를 정의할 수 있다면 좋겠다.
그림에 구체적으로 써 보세요.
follower
user
을 통해 많은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 사용)②
Reference
이 문제에 관하여(Rails에 사용자 추적 기능 설치(Ajax 사용)①), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tanutanu/items/a4a33554cb0e873720e9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)