0
我在兩個模型之間創建了一個連接表來表示它們之間的'多對多'關係(使用has_many: through
關聯)。我們應該爲連接表模型創建制造商嗎?
我現在正在寫測試,我不知道是否應該爲該連接表模型創建一個構造器?我的連接表只包含2個相關模型的外鍵。
我在兩個模型之間創建了一個連接表來表示它們之間的'多對多'關係(使用has_many: through
關聯)。我們應該爲連接表模型創建制造商嗎?
我現在正在寫測試,我不知道是否應該爲該連接表模型創建一個構造器?我的連接表只包含2個相關模型的外鍵。
對於您將在測試中創建的模型,您只需要工廠。
例如,如果您有:
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
算不上最好世界上的例子 - 所有的咖啡... – max
,這使得感謝@max很有意義。然而,當你說「你不需要UserProject的工廠,因爲ActiveRecord在需要的時候創建了連接模型」,has_many:through'''關聯也是這樣嗎? –
是的,在第一個例子中,執行'user.projects.create'或'project.users.create'也會在'user_projects'中插入一條記錄。 – max