J'ai un modèle qui a beaucoup de relation avec un modèle de version. Toute action sur le modèle parent doit être suivie. Au formulaire de suppression, j'ai ajouté un formulaire imbriqué pour entrer un numéro de billet qui sera ajouté aux versions. Comment puis-je vérifier les validations du modèle si le ticket est donné? Je vais écrire la version avant que la destruction sur le modèle ne soit appelée.before_destroy vérifier si l'attribut pour le modèle associé est donné (contrôle de version)
# model.rb
class Model < ActiveRecord::Base
has_many :versions,
:as => :version_object
end
# models_controller.rb
def destroy
@model = Model.find(params[:id])
self.write_versions('Destroy')
@Model.destroy
respond_to do |format|
...
end
end
# delete.html.erb
<%= form_for [@model.parent_object, @model], :html => { :class => 'form-horizontal' }, :method => :delete
do |f| %>
<div class="form-actions">
<%= f.fields_for :versions, @model.versions.build do |v| %>
<%= v.text_field :ticket, {:class => 'text_field', :placeholder => 'Ticket Nummer'}%>
<% end %>
<%= f.submit 'Delete Model', :class => 'btn btn-danger' %>
<%= link_to t('.cancel', :default => t("helpers.links.cancel")),
:back, :class => 'btn' %>
</div>
<% end %>
Je l'ai déjà essayé de mettre en œuvre une méthode before_destroy pour vérifier si une version avec l'action « Destroy » est écrit, mais cela ne fonctionnera pas parce que les champs clés pour identifier l'action donnée pourrait être existe plus d'une fois . Les versions sont incrémentales et peuvent être annulées étape par étape pour obtenir une version plus ancienne et mon modèle pourrait avoir plus d'un identifiant de relation au cours de la vie de son parent.
Une solution consisterait à vérifier l'existence du ticket au niveau du contrôleur via les paramètres, mais les validations devraient être effectuées sur le modèle. Je ne veux pas utiliser une gem versioning.
Quelqu'un peut-il suggérer comment implémenter une telle validation?
Bon indice et concept. Le callback doit être before_destroy car rails3 ne me laisse pas créer! un enfant sauf si le parent est enregistré. Et after_destroy le parent n'existera plus. – SonIcco