본문으로 바로가기

Association

category Studies/RubyonRails 2022. 1. 16. 22:03

| Association

A DB에 B DB의 어떤 데이터를 삽입해야 할 때 유용한 rails 의 기능이다.

DB간의 종속성을 정의할 수 있다.

 

| 구성

각 유저당 개인적인 친구목록 DB를 가져야 하는 앱이라고 가정해보자.

model 은 friend, user 가 있다.

 

models/friend 

class Friend < ApplicationRecord
    belongs_to :user 
end

 

belongs_to 를 사용하여 friend 모델은 user 모델에 속한다고 명시해준다.

 

models/user

class User < ApplicationRecord
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable

         has_many :friends
end

has_many 를 사용하여 하나의 user 모델은 friends 모델을 가진다고 명시해준다.

 

아래의 명령어를 사용하여 friends db에 user_id column 하나를 추가해 준다.

rails g migration add_user_id_to_friends user_id:integer:index

column에는 integer 타입으로써 추가된다고 명시하였고, index에도 user_id가 추가된다고 명시하였다.

 

이후에는 물론 rails db:migration을 실행해 주어야 한다. 

 

그러면 db/schema 에 다음과 같이 추가될 것이다.

  create_table "friends", force: :cascade do |t|
    t.string "name"
    t.float "q"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
    t.integer "user_id"
    t.index ["user_id"], name: "index_friends_on_user_id"
  end

이제 user 가 friends 목록을 삽입 할 때마다 고유한 어떤 user_id 를 (devise의 경우 currentuser.id 헬퍼 사용 )

같이 집어넣을 수 있도록 해준다면, 처음에 말 한 대로 user마다 서로다른 friends db를 갖도록 구상할 수 있다.