【发布时间】:2011-05-28 19:18:48
【问题描述】:
我对无法保存的对象感到困惑,简化模型是
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
在我的订阅控制器中
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 方法。不幸的是我不知道为什么这个对象是无效的。
如果您有任何想法,谢谢。
【问题讨论】:
-
你能重新添加你的验证器吗?也很高兴看到脚本/控制台会话显示您认为正在创建的有效订阅。
-
什么时候打电话给
subscription.errors.full_messages?在save/valid?之后? -
感谢您的回答,马克我添加了我的验证。 Marcel 我在保存错过后尝试显示错误(我在示例中的控制器中添加了调试器断点)
标签: ruby-on-rails ruby validation activerecord save