t.references :item, null: false, foreign_key: true
# 원래는 함수임. t.references(:item, {null: false, foreign_key: true})
class Option < ApplicationRecord
belongs_to: item # 옵션은 아이템에 속해있다
end
class Item < ApplicationRecord
has_many: options, # 역으로, 아이템은 많은 옵션을 가지고 있다
dependent: :destroy
# 의존성 설정(dependent) : 아이템(부모레코드)이 삭제 되면
# 옵션(자식레코드)은 destroy(null값을 주는 게 아니라, 아예 같이 삭제 시키겠다)
end
class Order < ApplicationRecord
belongs_to: user, # 주문은 사용자에 속해있다
optional: true # 사용자가 반드시 필요한 값은 아님(=is nullable)
end
class User < ApplicationRecord
has_many: orders, # 유저는 주문을 가지고 있다
dependent: :nullify
# 유저(부모레코드)가 삭제 되면
# destroy : 주문(자식레코드)은 같이 삭제하지 않고 null값을 준다
end
# 이해를 돕기 위한 예시 코드
class Mentor < ApplicationRecord
belongs_to: wecode
# 자식 레코드에서 본인의 부모 레코드를 명시해줘야 함(소속 밝힘)
# 멘토는 위코드에 속해있다
end
class Wecode < ApplicationRecord
has_many: mentors, dependent: destroy
# 위코드(부모레코드)에는 많은 멘토들을 가지고 있다.
# 위코드가 없어지면 멘토만 남을 수 없고 멘토도 같이 해고된다.
# 우리가 없어지면 멘토들도 같이 나가야 한다고 위코드가 정해버리는 것.
has_many: wecoders, dependent: :nullify
# 위코드(부모레코드)는 많은 위코더들을 가지고 있다.
# nullify: 위코드가 없어져도, 위코더는 없어지지 않는다. 이 내용을 위코드에서 명시해준다.
end
class Wecoder < ApplicationRecord
belongs_to: wecode, optional: true
# belongs_to : 위코더는 위코드에 속해있다(소속 밝힘)
# optional : 하지만 위코드가 반드시 필요한 것은 아니다.
end
HOW 부모의 레코드가 삭제 됐을 때 자식 레코드는? (루비온레일즈 용어)
Destroy
: 같이 삭제를 시켜버리는 것Nullify
: 유저의 외래키(FK)만 빈값으로 바꾸는 것 Item.first.destroy
item의 첫번째 데이터 삭제
Item.all
잘 삭제됐나 확인
와우 적절한 비유로 이해가 바로 됐네요 !!