0

我有两个模型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 方法创建 :category 工厂?就像是:

factory :category do
  1. board = FactoryGirl.create(:board)
  2. returns board.root_category as a factory output.
end
4

1 回答 1

1

您的问题可以直接解决,但问题多于解决方案。

要准确回答您的问题,您不需要“类别”工厂来为板创建根类别。回调将在模型级别执行,无需 FactoryGirl 干预。

还有一些担忧

  1. 在外部模型/类上使用回调不是一个好习惯。Category 在 Board 之外,因此 Board 不应在它的回调中调用 Category,这应该是一个私人空间。相反,更好的方法是在 BoardsController 的 #create 中将根类别添加到板中

  2. 您可能需要重新考虑您的建模。在常识中,模型及其类别在多对多关系中会更好。假设在您的情况下,一个板具有“编码”类别,那么“编码”类别不能再用于您建模中的其他板上!

于 2013-07-12T17:27:59.283 回答