簡體   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