[英]FactoryBot: Multi-Level associations?
所以我对工厂机器人比较陌生,我将一些旧的 php 代码上的一些模态拉入 Rails。 而且我似乎遇到了一个特定工厂创建的问题。
现在这是我的基本factories.rb
文件:
FactoryBot.define 做
factory :"Core/User" do
username {"jDoe"}
end
factory :"Core/Sex" do
title {"Unspecified"}
abbreviation {"U"}
end
factory :"Core/Contact" do
first_name {"John"}
last_name {"Doe"}
display_phone_mobile {false}
internal {false}
archive {false}
"Core/Sex"
end
factory :"Core/Employee" do
"Core/User"
"Core/Contact"
username {"jDoe"}
end
结尾
现在非常基本,因为模式有点混乱。 无论如何,无论出于何种原因,一切正常,直到我开始尝试创建一个“员工”(旁注:我必须将Core::
添加到所有内容中,并且必须搜索 SO 以找出如何将其添加到符号中,因为它们是命名空间的我猜?(我知道我需要使用Core::<Model>
访问 rails fwiw 中的模型)
无论如何,模型相对复杂,但重要的部分在这里:
Contact.rb
:
class Core::Contact < Core::BaseModel
self.primary_key = 'id'
has_one :employee
belongs_to :sex
User.rb
:
class Core::User < Core::BaseModel
extend Core::ActiveDirectory
self.primary_key = 'id'
has_one :employee
Employee.rb
:
class Core::Employee < Core::BaseModel
include ActionView::Helpers::DateHelper
self.primary_key = 'id'
belongs_to :contact
还有大量其他依赖项需要解决……但无论出于何种原因,协会在招聘员工时似乎都没有引入contact_id
。 因为它特别抱怨TinyTds::Error: Cannot insert the value NULL into column 'contact_id'
事情是,所有其他人都工作得很好。 IE:如果我创建一个 Contact,它会很好地引入“Core/Sex”,然后我手动创建“Contact”工厂并专门引入 ID,如下所示:
@contact = create(:"Core/Contact")
puts @contact.attributes
@employee = create(:"Core/Employee", contact_id: @contact.id)
有用,? 但我不知道为什么其他协会被拉进来就好了? 有任何想法吗?
你不需要那个; 您只需将工厂称为一个单词,然后 Factory 构造函数就有一个class:
选项
只需将所有工厂移至标准名称即可
factory :employee, class: "Core::Employee" do
user { create(:user) }
contact { create (:contact) }
username {"jDoe"}
end
当您将它们称为工厂时,只需使用带符号的短名称并让class:
选项执行 rest。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.