Ruby on Rails 튜토리얼 제14장 Relationship 모델(팔로우 팔로워 관계)
4856 단어 튜토리얼RailsRubyOnRailsTutorial
Relationship 모델 정보
여기서는, 복수의 유저 간의 팔로우 팔로워 관계를 규정하는 rails 튜토리얼에 있어서의 Relationship 모델에 대해서 개요를 설명한다.
한 사용자 A가 다른 사용자 B를 follow하고 있다는 관계를 표현하기 위해서는 A가 B를 follow하는 주체(A가 B인 follower)이고, B가 A에 follow되어 있다(B is followed by A)라는 사태에 주목하여 다음과 같은 follower_id와 followed_id라는 데이터 항목을 가진 Relationship 데이터 모델을 작성한다.
이 데이터 모델을 구현하기 위해,
$ rails generate model Relationship follower_id:integer followed_id:intege
에서 마이그레이션을 만듭니다.
이 사용자 팔로워 간의 관계는 follower_id와 followed_id로 자주 검색되기 때문에 해당 열에 인덱스를 추가합니다.
db/migrate/[timestamp]_create_relationships.rbclass CreateRelationships < ActiveRecord::Migration[5.0]
def change
create_table :relationships do |t|
t.integer :follower_id
t.integer :followed_id
t.timestamps
end
add_index :relationships, :follower_id
add_index :relationships, :followed_id
add_index :relationships, [:follower_id, :followed_id], unique: true
end
end
이 마이그레이션 파일에는 follower_id와 followed_id의 복합 키 인덱스를 추가하고 이들의 조합이 고유하다는 것을 보증하는 설명이 있다는 점에 유의한다. 이 고유성은 어떤 사용자가 동일한 사용자를 2회 이상 팔로우하는 것을 막을 수 있다. (2번째 이후 같은 사용자를 팔로우하면 이미 등록되어 있는(follower_id,followed_id)의 조합이 다시 등장하고, 고유성이 유지되지 않아 에러가 발생한다.)
다음에 User와 Relationship의 관련을 실시한다.
app/models/user.rbclass User < ApplicationRecord
has_many :microposts, dependent: :destroy
has_many :active_relationships, class_name: "Relationship",
foreign_key: "follower_id",
dependent: :destroy
.
.
.
end
app/models/relationship.rbclass Relationship < ApplicationRecord
belongs_to :follower, class_name: "User"
belongs_to :followed, class_name: "User"
end
이 user.rb 파일에서는 class_name으로 User와 연결하는 클래스명(Relationship)을 지정하고, 별개의 데이터 모델을 연결하는 key인 foreign_key를 Relationship의 follower_id로 지정하고 있다. 이러한 설명을 has_many 메소드에 : active_relationships 심볼을 전달한 것에 부여함으로써, 한 명의 User가 Realtionship 모델의 follower_id로 연결되는 복수의 active_relationships 데이터를 가질 수 있게 된다. 또한 relationship.rb 파일을 통해 하나의 Relationship은 User 모델의 user.id에 해당하는 follower에 일대일 (belongs_to) 관계가 있음을 지정합니다. 이 연관에 의해, 이하와 같은 active_relationship이 실현된다.
Reference
이 문제에 관하여(Ruby on Rails 튜토리얼 제14장 Relationship 모델(팔로우 팔로워 관계)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ysdYSD/items/8e76a0200ea70f34e990
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ rails generate model Relationship follower_id:integer followed_id:intege
class CreateRelationships < ActiveRecord::Migration[5.0]
def change
create_table :relationships do |t|
t.integer :follower_id
t.integer :followed_id
t.timestamps
end
add_index :relationships, :follower_id
add_index :relationships, :followed_id
add_index :relationships, [:follower_id, :followed_id], unique: true
end
end
class User < ApplicationRecord
has_many :microposts, dependent: :destroy
has_many :active_relationships, class_name: "Relationship",
foreign_key: "follower_id",
dependent: :destroy
.
.
.
end
class Relationship < ApplicationRecord
belongs_to :follower, class_name: "User"
belongs_to :followed, class_name: "User"
end
Reference
이 문제에 관하여(Ruby on Rails 튜토리얼 제14장 Relationship 모델(팔로우 팔로워 관계)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ysdYSD/items/8e76a0200ea70f34e990텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)