工厂女孩has_many/has_many通过验证



我在正确设置工厂以进行has_many/has_many时遇到问题,或者has_and_belongs_to_many与验证相关联。客户端模型/工厂已被省略,但它确实存在。设置has_many以通过与需要传入属性的验证关联来has_many的最佳方法是什么?

我已经尝试了几种让它工作的方法,但没有成功。当前相关代码如下(略有改动(。尝试了其他方法:在client_team创建user_clients的 after(:create( 和 before(:create(,client_teams 上的特征和定义关联的user_clients,使用 build_list/create_list 代替铲子操作员。

客户团队模型:

belongs_to :client
has_many :client_team_rosters
has_many :users, through: :client_team_rosters

用户型号:

belongs_to :client
has_many :client_team_rosters
has_many :client_teams, through: :client_team_rosters
validates_presence_of :client_teams

客户团队名单模型:

belongs_to :user
belongs_to :client_team

相关工厂:

factory :client_team do
client
team_name "stuff"
end
factory :client_team_roster do
client
user
end
factory :user do
...
factory :user_client do
client
before(:create) do |user_client|
client_team = user_client.client.client_teams.first
user_client.client_team_rosters << FactoryGirl.build(:client_team_roster, user: user_client, client_team: client_team)
end
end
end

规范文件:

before(:each) do
@client = create(:client)
@client_team = create(:client_team, client: @client)
end
it "should do something" do
user_client = create(:user_client, client: @client)
end

当前错误:

Validation failed: Client_teams can't be blank

呃,所以在发布这篇文章后,我决定做一个小的调整,它最终起作用了。我不会删除问题,而是发布我的修复程序以帮助将来的其他人(希望减少反复试验(

在user_client工厂中,将回调更改为:

before(:create) do |user_client|
client_team = user_client.client.client_teams.first
user_client.client_teams << client_team
end

这模仿了我们在代码库中设置模型的方式。我可以发誓我早点试过这个,但这次尝试成功了

编辑:我们还有一个继承自:user_client的工厂。在这些情况下,before(:create(似乎不会触发。但是,这些继承的工厂可以在创建/构建时使用 :client_teams => [client_team] 初始化

相关内容

最新更新