我对我无法保存的对象感到困惑,简化模型是
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
和我的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方法。不幸的是,我不知道为什么对象无效。
如果您有任何想法,谢谢。
答案 0 :(得分:48)
我遇到了同样的问题。起初我在我的模型中有这样的代码:
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
我可以看到我的错误。
也许你的代码中有类似的东西?
答案 1 :(得分:11)
为什么不试试@object.save!
Ruby应该告诉你在尝试保存对象时出了什么问题。
答案 2 :(得分:6)
尝试查看以下结果:
subscription.errors.inspect
答案 3 :(得分:2)
好的,我终于找到了问题,感谢配偶的帮助。
我压倒有效? Subscription类中的方法,用于测试具有相同语义的另一个功能。大错,我juste重命名了这个方法,它现在就像一个魅力。