/ / È possibile non consentire l'eliminazione di un modello, ma consentirne la distruzione come dipendenza in Rails / ActiveRecord? - ruby-on-rails, ruby-on-rail-3, activerecord, ruby-on-rail-4, rails-activerecord

È possibile non consentire l'eliminazione di un modello, ma permetterne la distruzione come dipendenza in Rails / ActiveRecord? - ruby-on-rails, ruby-on-rail-3, activerecord, ruby-on-rail-4, rails-activerecord

A causa di problemi di dipendenza, non posso distruggere un particolare oggetto a. Il modo per distruggerlo è distruggendo un oggetto diverso b che ha dependent: :destroy per il suo belongs_to associazione a a:

class A < ActiveRecord::Base
#don"t ever delete this directly
has_one :b, dependent: :destroy
end
class B < ActiveRecord::Base
#delete this object instead and it will automatically delete A
belongs_to :a, dependent: :destroy
end

C'è un modo per specificare che l'eliminazione a non è permesso, ma permetti comunque di cancellarlo quando b è cancellato?

Posso metterlo dentro A:

before_destroy :prevent_destroy

private
def prevent_destroy
false
end

ma allora A non sarà cancellato come dipendenza di B.

risposte:

0 per risposta № 1

Non sono sicuro di aver compreso correttamente la domanda. Poteva

class A < ActiveRecord::Base
#don"t ever delete this directly
has_one :b, dependent: :restrict
end

Lavoro per te?


0 per risposta № 2

Puoi controllare se destroyed_by_association è impostato nel callback. Qualcosa di simile a:

before_destroy :prevent_destroy

private
def prevent_destroy
destroyed_by_association     #nil is falsey
end

Riferimento: http://api.rubyonrails.org/classes/ActiveRecord/AutosaveAssociation.html#method-i-destroyed_by_association