2016-10-10 118 views
0

我在兩個模型之間創建了一個連接表來表示它們之間的'多對多'關係(使用has_many: through關聯)。我們應該爲連接表模型創建制造商嗎?

我現在正在寫測試,我不知道是否應該爲該連接表模型創建一個構造器?我的連接表只包含2個相關模型的外鍵。

回答

1

對於您將在測試中創建的模型,您只需要工廠。

例如,如果您有:

class User 
    has_many :user_projects 
    has_many :projects, through: :user_projects 
end 

class UserProject 
    belongs_to :user 
    belongs_to :project 
end 

class Project 
    has_many :user_projects 
    has_many :users, through: :user_projects 
end 

你並不真的需要一個工廠UserProject爲ActiveRecord的創建需要時加入模型。

Fabricator(:user) do 
    projects(count: 3) 
end 

Fabricator(:project) do 
    user 
end 

但是,如果「支點」模型不僅僅是一個簡單的連接表越來越有自己的屬性往往是非常有用的該對象的工廠:

class User 
    has_many :lists 
    has_many :tasks, through: :lists 
end 

class List 
    belongs_to :user 
    has_many :tasks 
end 

class Task 
    belongs_to :list 
    has_one :user, through: :list 
end 

Fabricator(:list) do 
    name { 'Shopping List' } 
    user 
    tasks(count: 3) 
end 
+0

算不上最好世界上的例子 - 所有的咖啡... – max

+0

,這使得感謝@max很有意義。然而,當你說「你不需要UserProject的工廠,因爲ActiveRecord在需要的時候創建了連接模型」,has_many:through'''關聯也是這樣嗎? –

+1

是的,在第一個例子中,執行'user.projects.create'或'project.users.create'也會在'user_projects'中插入一條記錄。 – max

相關問題