繁体   English   中英

FactoryBot:多级关联?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM