Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

연관관계에 dependent: :destroy 걸기 #323

Open
shaynekang opened this issue Oct 18, 2014 · 2 comments
Open

연관관계에 dependent: :destroy 걸기 #323

shaynekang opened this issue Oct 18, 2014 · 2 comments

Comments

@shaynekang
Copy link

레일즈 모델의 has_many에는 dependent: :destroy 라는 개념이 있습니다.
부모 모델이 DB에서 제거되었을 경우, 자식 모델도 함께 DB에서 없애주는 기능이죠.

가령 사용자와 초대장 모델의 연관관계를 다음과 같이 정의했다면,

class User < ActiveRecord::Base
  has_many :invitations
end

class Invitation < ActiveRecord::Base
  belongs_to :user
end

사용자를 DB에서 제거하면 초대장이 남아있게 됩니다.
이를 방지하기 위해서는 다음의 코드를 추가해야겠죠.

class User < ActiveRecord::Base
  has_many :invitations, dependent: :destroy
end

class Invitation < ActiveRecord::Base
  belongs_to :user
end

모델 연관관계를 살펴보고 dependent: :destroy가 필요한 부분은 추가해 주면 좋겠습니다. ㅎㅎ

@minhyeok4dev
Copy link

제가 구현하던 것도 같은 고민이 있었는데 그냥 저희끼리 있을때 간단히 얘기하기로는 "관계를 끊어 남겨버리는 한이 있더라도 소중한(?) DB를 날리진 말자"로 정했었는데요. 다시 정책을 세워볼 필요가 있을까요?

@shaynekang
Copy link
Author

그런 경우에는 destroy할 때 flag를 세우는 방식을 사용하는 걸 권장합니다. ㅎㅎ

User는 없는데 Invitation만 남아있는 경우가 생긴다면 곤란할 것 같습니다. invitations.user_id가 nil인게 버그로 생긴 잘못된 데이터인지, User가 삭제된 데이터인지 알 수 없으니까요.

User를 지울거면 둘 다 지우고, 안 지울거면 둘 다 안 지우되 flag를 세워주는 게 좋을 것 같아요. ㅎㅎ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants