1

我有一个带有几个外键的 Store 模型。我有 state_id、country_id、currency_id、timezone_id 等...我应该为其中的每一个创建一个工厂吗?然后在 Store 的工厂中执行以下操作:

a.state State.where(:abbreviation => "MA").first || Factory(:state, :abbreviation => "MA")

还是我应该只播种这些数据?

4

2 回答 2

3

如果您使用 rake seed 任务,它只会将其添加到数据库中。但是,很多事情,比如 db:test:prepare 任务,会从数据库中删除所有记录,所以种子任务不会生效。

您的工厂方法看起来不错,但我建议您将代码放在一对大括号中。

a.state { State.where(:abbreviation => "MA").first || Factory(:state, :abbreviation => "MA") }

这将在每次调用工厂时重新运行,并防止在数据库中创建重复项。

于 2012-05-08T19:06:46.377 回答
1

使用工厂女孩,它已经完成了耙子的工作。

如果您问我,对于这种特殊情况(暗示您已经在使用工厂女孩),您应该使用 rake seed。我给你一个更大的NO。这会破坏您的组织与您的测试。

于 2012-05-08T19:14:08.600 回答