似乎在Google搜索和测试几个小时之后,我应该能够找到这个问题的明显答案。
我希望能够设置caredate.user_id => caredate工厂内的provider.user_id。
测试错误:
的ActiveRecord :: RecordInvalid: 验证失败:用户必须相同 作为提供者用户
我有一个ActiveRecord验证,在通过浏览器测试时有效:
class Caredate < ActiveRecord::Base //works fine when testing via browser
belongs_to :user
belongs_to :provider
validates_presence_of :user_id
validates_presence_of :provider_id
validate :user_must_be_same_as_provider_user
def user_must_be_same_as_provider_user
errors.add(:user_id, "must be same as provider user") unless self.user_id == self.provider.user_id
end
end
//factories.rb
Factory.define :user do |f|
f.password "test1234"
f.sequence(:email) { |n| "foo#{n}@example.com" }
end
Factory.define :caredate do |f|
f.association :provider
**f.user_id { Provider.find_by_id(provider_id).user_id } //FAILS HERE**
end
Factory.define :provider do |f|
f.association :user
end
如果以前已经回答,我道歉;我尝试了几种不同的选择,无法让它发挥作用。
更新:这通过验证,所以我越来越近了。我可以用一个随机数来破解。
Factory.define :caredate do |f|
f.association :user, :id => 779
f.association :provider, :user_id => 779
end
答案 0 :(得分:8)
Factory.define :caredate do |f|
provider = Factory.create(:provider)
f.provider provider
f.user provider.user
end
答案 1 :(得分:0)
尝试在after_create
或after_build
中设置user_id:
Factory.define :caredate do |f|
f.after_create { |caredate| caredate.user_id = caredate.provider.user_id }
end