J'ai un modèle nommé Tickets qui est enregistré dans la base de données même lorsque n'est pas valide. Cela m'empêche d'utiliser des validations pour empêcher que des données dupliquées soient enregistrées dans la base de données en tant que . Dans script/consoleL'objet Rails dans la base de données est invalide
>> Ticket.last.valid?
=> False
>> Ticket.first.valid?
=> False
Si j'essaie de voir quelles erreurs sont associées à cet objet invalide
>> Ticket.last.errors.each{|attr,msg| puts "#{attr} - #{msg}\n" }
=> {}
Cela veut-il que quelqu'un sait comment il est possible d'enregistrer un objet non valide à la base de données , et comment puis-je trouver ce qui rend l'objet invalide?
Ticket.rb (modèle)
class Ticket < ActiveRecord::Base
belongs_to :whymail
belongs_to :forms
attr_accessible :to_email, :to_email, :from_email, :subject, :body
validates_uniqueness_of :to_email, :scope => [:body, :from_email]
validates_presence_of :to_email
validates_presence_of :from_email
validates_presence_of :subject
validates_presence_of :body
def after_create
if self.valid?
whymail = Whymail.find(:first, :include => :user, :conditions => ['(email = ?)', self.to_email.upcase ])
if !whymail.nil?
self.whymail_id = whymail.id
self.save
MyMailer.deliver_forward(whymail.user.email, self.from_email, self.to_email, self.subject, self.body)
end
end
end
end
Une partie de cette question a été répondu, deuxième était pas. Quelqu'un peut-il voir des problèmes avec ce modèle qui peut lui permettre d'enregistrer même si elle est invalide ??
Tout à fait logique, il dit que j'ai une erreur sur l'adresse e-mail que je m'attendrais (je ne veux pas les e-mails enregistrés qui ont le même, de, et le corps). Y a-t-il quelque chose qui ne va pas dans mon modèle qui lui permet d'économiser même s'il est invalide? Je sauvegarde via Ticket.create à l'intérieur d'une méthode de réception d'action mailer. – Schneems
Je me demande si elle est devenue invalide après avoir été sauvegardée via une sorte de timing. validates_uniqueness_of n'est pas fiable à 100%. Je recommande de mettre également une contrainte dans la base de données. – MattMcKnight