【发布时间】:2011-05-06 19:32:07
【问题描述】:
我有一个这样定义的家庭类:
class Family < ActiveRecord::Base
after_initialize :initialize_family
belongs_to :user
validates :user,
:presence => true
validates :name,
:presence => true,
:length => { :maximum => 30 },
:format => { :with => /\A[a-zA-Z0-9\-_\s\']+\z/i}
def initialize_family
if self.name.blank? && self.user
self.name = "#{self.user.profile_full_name}'s Family"
end
end
end
在我的 factory.rb 中有:
Factory.define :family do |f|
f.association :user, :factory => :user
end
在我的 family_spec.rb 中有
let(:family) { Factory(:family) }
但这失败了:
1) Family is valid with valid attributes
Failure/Error: let(:family) { Factory(:family) }
ActiveRecord::RecordInvalid:
Validation failed: Name can't be blank, Name is invalid, Languages can't be blank, Languages is too short (minimum is 1 characters)
# ./spec/models/family_spec.rb:8:in `block (2 levels) in <top (required)>'
# ./spec/models/family_spec.rb:10:in `block (2 levels) in <top (required)>'
使用调试器我可以看到当调用 after_initialize 时 self.user 为 nil。为什么会这样? 如果我用 create 或 new 给家人打电话,一切正常。
感谢您的帮助。
【问题讨论】:
标签: ruby-on-rails-3 factory-bot