我有两个模型Board
和Category
,关系为has_many / belongs_to。
在Board
我有after_create
回调为其创建默认类别。
因此,当我创建Board时,它会自动为其创建默认类别。
after_create do
categories.create(name: "All Links", description: nil)
end
现在我创建基本的:电路板工厂:
factory :board do
name {Faker::Lorem.sentence(rand(5)+1)}
description {Faker::Lorem.paragraph(rand(5))}
end
我有Board实例方法:root_category,返回此默认类别。
我的问题是,如何创建:基于此类别的工厂:board.root工厂和#root_category方法?类似的东西:
factory :category do
1. board = FactoryGirl.create(:board)
2. returns board.root_category as a factory output.
end
答案 0 :(得分:1)
您的问题可以直接解决,但除了解决方案之外还有其他问题。
要准确回答您的问题,您不需要“类别”工厂来为电路板创建根类别。回调将在模型级执行,不需要干扰FactoryGirl。
在外部模型/类上使用回调不是好习惯。类别在Board之外,因此Board不应该在它的回调中调用Category,这应该是私有空间。相反,更好的方法是在BoardsController的#create
您可能需要重新考虑您的建模。在常识中,模型及其类别在多对多关系中会更好。假设,在您的情况下,电路板具有类别“编码”,那么“编码”类别在您的建模中不能再用于其他电路板!