object.valid? 返回false但object.errors.full_messages为空

我混淆了我无法保存的对象,简化模型是

class Subscription  "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 

并在我的subscription_controller中

 if subscription.save # do something else debugger # means breakpoint where i try subscription.errors.full_messages # do something else end 

我尝试使用ruby-debug为此添加一个断点,我在那里进行一些测试

 subscription.valid? #=> false subscription.errors.full_messages #=> [] subscription.save! #=> ActiveRecord::RecordInvalid (Validation failed:) 

这说明ActiveRecord不允许使用save方法。 不幸的是我不知道为什么对象无效。

如果您有任何想法,谢谢。

我有同样的问题。 起初我在我的模型中有这样的代码:

 before_validation :set_some_param def set_some_param self.some_param = some_value end 

我改为之后:

 before_validation :set_some_param def set_some_param self.some_param = some_value true end 

我可以看到我的错误。

也许你的代码中有类似的东西?

你为什么不试试@object.save!

Ruby应该告诉你在尝试保存对象时出了什么问题。

尝试查看以下结果:

 subscription.errors.inspect 

好的,我终于找到了问题,感谢配偶的帮助。

我是否压倒有效? Subscription类中的方法,用于测试具有相同语义的另一个function。 大错,我juste重命名了这个方法,它现在就像一个魅力。