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