Model-M:N relation

:예를들어 한명의 학생은 많은 과목을 수강할 수 있고, 하나의 강좌는 여러명의 학생이 들을 수 있습니다.

1. has_and_belongs_to_many Association

rails new week4again
rails g model user name mail age:integer
rails g model group name
# string은 default

rails g migration CreateJoinTableGroupUser group user
rails db:migrate
#group.rb
has_and_belongs_to_many :users
#user.rb
has_and_belongs_to_many :groups

association이름은 모두 복수형으로 지정한다.

# rails c
User.create!(name: "minwoo")
Group.create!(name:"old")
Group.create!(name:"young")
u=User.find(1)
u.group_ids = 2
u.save

2.has_many through Association

# book.rb
has_many :reviews
has_many :users, through :reviews
# review.rb
belongs_to :book
belongs_to :user
# user.rb
has_many :reviews
has_many :books, through :reviews

has_many through Association을 사용하면 Book모델에서 곧바로 User모델에 접근할 수 있다. through을 이용안하면 Book->Review=>User처럼 접근해야한다.

1번 방법은 중간테이블에서 양쪽 모델의 키라는 단순한 정보만을 가지고 있으므로 위의 M:N과 같은 경우는 중간 모델이 필요하다.

Last updated