I'm confuse about objects that I can't save, simplified model is
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 
and in my subscription_controller
if subscription.save
     # do something
else
     debugger # means breakpoint where i try subscription.errors.full_messages
     # do something else
end 
I tried to use ruby-debug for this adding a breakpoint where i do some tests
subscription.valid? #=> false 
subscription.errors.full_messages #=> []
subscription.save! #=> ActiveRecord::RecordInvalid (Validation failed:)
which explains that ActiveRecord doesn't allow the save method. Unfortunately i can't know why the object is invalid.
If you have any idea, thank you.
I had the same problem. At first I had such code in my model:
before_validation :set_some_param
def set_some_param
   self.some_param = some_value
end
After I changed this to:
before_validation :set_some_param
def set_some_param
   self.some_param = some_value
   true
end
I could see my errors.
Maybe you have something simular in your code?
Why don't you try @object.save!
Ruby should tell you what went wrong during the attempt to save the object.
Try looking at the results from:
subscription.errors.inspect
                        Ok I finally found the problem, thanks mates for the help.
I was overriding the valid? method in Subscription class to test another functionality which has not the same semantic. Big mistake, I juste renamed the method and it now works like a charm.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With