부모가 삭제되지 않는 한 레일이 자식 삭제를 방지합니다.
-
26-12-2019 - |
문제
레일 4에 루비에서 부모님이 많은 아이들이 있다고 가정 해 봅시다.부모가 삭제되면 아이들도 삭제해야합니다.그 외에도, 아이는 고아가 아니라면 삭제해서는 안됩니다.어떻게해야합니까?
다음을 사용하여 다음을 시도했습니다
class Parent < ActiveRecord::Base
has_many :children, inverse_of: :parent, dependent: :destroy
end
class Child < ActiveRecord::Base
belongs_to :parent, inverse_of: :children
before_destroy :checks
private
def checks
not parent # true if orphan
end
end
.
before_destroy 점검을 사용하면 아무 것도 삭제되지 않습니다.부모님 삭제가 있기 때문에 호출 된 이유가 있으면이 방법을 알리는 방법이 있습니까?
이거 이상한 일입니까?나는 아이들의 삭제를 방지합니다.
해결책
RAILS : 부모가 파괴되고 있기 때문에 PERSED가 파괴되고 있으므로 _DestROY 콜백을 비활성화하는 방법 (dependent=> : destroy) , 시도하십시오 :
어린이 :
belongs_to :parent
before_destroy :prevent_destroy
attr_accessor :destroyed_by_parent
...
private
def prevent_destroy
if !destroyed_by_parent
self.errors[:base] << "You may not delete this child."
return false
end
end
.
학부모 :
has_many :children, :dependent => :destroy
before_destroy :set_destroyed_by_parent, prepend: true
...
private
def set_destroyed_by_parent
children.each{ |child| child.destroyed_by_parent = true }
end
.
우리는 Paranoia를 사용하고 있고 dependent: delete_all
가 소프트 삭제보다는 하드 삭제되기 때문에이 작업을 수행해야했습니다.내 장은이 일을 할 수있는 더 좋은 방법이 있다고 말하면서, 그것은 분명하지 않으며, 이것은 일을 끝내립니다.
제휴하지 않습니다 StackOverflow