objet.est-il valide? renvoie la valeur false, mais de l'objet.erreurs.full_messages est vide
Je me suis tromper sur les objets que je ne peux pas enregistrer, modèle simplifié est
class Subscription < ActiveRecord::base
belongs_to :user, :class_name => "User", :foreign_key => "user_id"
has_many :transactions, :class_name => "SubscriptionTransaction"
validates_presence_of :first_name, :message => "ne peut être vide"
validates_presence_of :last_name, :message => "ne peut être vide"
validates_presence_of :card_number, :message => "ne peut être vide"
validates_presence_of :card_verification, :message => "ne peut être vide"
validates_presence_of :card_type, :message => "ne peut être vide"
validates_presence_of :card_expires_on, :message => "ne peut être vide"
attr_accessor :card_number, :card_verification
validate_on_create :validate_card
def validate_card
unless credit_card.valid?
credit_card.errors.full_messages.each do |message|
errors.add_to_base message
end
end
end
def credit_card
@credit_card ||= ActiveMerchant::Billing::CreditCard.new(
:type => card_type,
:number => card_number,
:verification_value => card_verification,
:month => card_expires_on.month,
:year => card_expires_on.year,
:first_name => first_name,
:last_name => last_name
)
end
end
et dans mon subscription_controller
if subscription.save
# do something
else
debugger # means breakpoint where i try subscription.errors.full_messages
# do something else
end
J'ai essayé d'utiliser ruby-debug pour cela, l'ajout d'un point d'arrêt où je fais quelques tests
subscription.valid? #=> false
subscription.errors.full_messages #=> []
subscription.save! #=> ActiveRecord::RecordInvalid (Validation failed:)
ce qui explique que ActiveRecord n'autorise pas la méthode save. Malheureusement, je ne sais pas pourquoi, l'objet n'est pas valide.
Si vous avez une idée, merci.
- Pouvez-vous ajouter des validateurs de retour dans? Il serait également agréable de voir un script/console session de montrer ce que vous croyez être un abonnement en cours de validité en cours de création.
- Lorsque vous appelez
subscription.errors.full_messages
? Aprèssave
/valid?
? - Merci pour les réponses, Mark-je ajouter mes validations. Marcel j'essaie d'afficher les erreurs après sauvegarde raté (j'ai ajouté débogueur point d'arrêt dans le contrôleur dans l'exemple)
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème. Au début, j'avais un tel code dans mon modèle:
Après j'ai changé cela:
J'ai pu voir mes erreurs.
Peut-être vous avez quelque chose de similaires dans votre code?
assign_attributes(some_param: some_value)
plutôt que d'assigner directement l'attribut, parce que cela va revenir un truthy valeur sur la réussite.Pourquoi n'essayez-vous pas
@object.save!
Ruby devrait vous dire ce qui s'est passé lors de la tentative d'enregistrer l'objet.
@object.save! --trace
mais je ne me souviens pas exactement... Si rien de la sorte ne fonctionne, je n'ai aucune idée de mon ami 🙁Essayer de regarder les résultats à partir de:
Ok j'ai enfin trouvé le problème, merci les copains pour l'aider.
J'ai été remplaçant la valide? méthode dans la classe d'Abonnement pour tester une autre fonctionnalité qui n'a pas la même sémantique. Grosse erreur, j'ai juste renommé de la méthode et ça fonctionne maintenant comme un charme.