Model-M:N relation

:์˜ˆ๋ฅผ๋“ค์–ด ํ•œ๋ช…์˜ ํ•™์ƒ์€ ๋งŽ์€ ๊ณผ๋ชฉ์„ ์ˆ˜๊ฐ•ํ•  ์ˆ˜ ์žˆ๊ณ , ํ•˜๋‚˜์˜ ๊ฐ•์ขŒ๋Š” ์—ฌ๋Ÿฌ๋ช…์˜ ํ•™์ƒ์ด ๋“ค์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1. has_and_belongs_to_many Association

: assemblies_parts์ฒ˜๋Ÿผ ํ˜•์‹์ ์ธ ์ค‘๊ฐ„ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•ด ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ!

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

M:N๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ, ๋‹จ์  ๋˜ํ•œ ์กด์žฌํ•œ๋‹ค.

# 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

Was this helpful?