/ / Possible de ne pas autoriser la suppression d'un modèle, mais d'autoriser sa destruction en tant que dépendance dans Rails / ActiveRecord? - ruby-sur-rails, ruby-sur-rails-3, activerecord, ruby-sur-rails-4, rails-activerecord

Possible de ne pas autoriser la suppression d'un modèle, mais d'autoriser sa destruction en tant que dépendance dans Rails / ActiveRecord? - ruby-sur-rails, ruby-sur-rails-3, activerecord, ruby-sur-rails-4, rails-activerecord

En raison de problèmes de dépendance, je ne peux pas détruire un objet particulier a. La façon de le détruire est de détruire un objet différent b qui a dependent: :destroy pour son belongs_to association à 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

Existe-t-il un moyen de spécifier que la suppression a n'est pas autorisé, mais permet toujours de le supprimer lorsque b est supprimé?

Je peux mettre ça A:

before_destroy :prevent_destroy

private
def prevent_destroy
false
end

mais alors A ne sera pas supprimé en tant que dépendance de B.

Réponses:

0 pour la réponse № 1

Je ne sais pas si je comprends bien la question. Pourrait

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

travailler pour vous?


0 pour la réponse № 2

Vous pouvez vérifier si destroyed_by_association est défini dans le rappel. Quelque chose comme:

before_destroy :prevent_destroy

private
def prevent_destroy
destroyed_by_association     #nil is falsey
end

Référence: http://api.rubyonrails.org/classes/ActiveRecord/AutosaveAssociation.html#method-i-destroyed_by_association