我有一个简单的联想:
class Account < ActiveRecord::Base
has_many :users
accepts_nested_attributes_for :users
validates_presence_of :users
end
和
class User < ActiveRecord::Base
belongs_to :account
end
我只是想进行一个简单的测试:
describe 'a new', Account do
it 'should be valid' do
Factory.build(:account).should be_valid
end
end
与工厂合作:
Factory.define :account do |a|
a.name { Faker::Company.name }
end
Factory.define :user do |u|
u.association :account
u.email { Faker::Internet.email }
end
但我总是遇到这个错误:
'a new Account should be valid' FAILED
Expected #<Account id: nil, name: "Baumbach, Gerlach and Murray" > to be valid, but it was not
Errors: Users has to be present
好吧,我设置了正确的关联,但它不起作用......
谢谢你的帮助。答案 0 :(得分:7)
validates_presence_of :users
模型中的 Account
负责测试失败。您的帐户中至少需要一个用户,因此可以创建该用户。
我不确定你真正想做什么,所以我给你两种方法来解决这个问题。第一个选择是改变你的工厂:
Factory.define :account do |a|
a.name { Faker::Company.name }
a.users {|u| [u.association(:user)]}
end
Factory.define :user do |u|
u.email { Faker::Internet.email }
end
另一种方法是检查属于哪一方的关联的存在。所以你需要改变你的模型:
class Account < ActiveRecord::Base
has_many :users
accepts_nested_attributes_for :users
end
class User < ActiveRecord::Base
belongs_to :account
validates_presence_of :account
end