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ès save/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)
InformationsquelleAutor albandiguer | 2010-12-21