我有一个带有几个外键的商店模型。我有state_id,country_id,currency_id,timezone_id等等......我应该为每一个创建一个工厂吗?然后在Store的工厂做类似的事情:
a.state State.where(:abbreviation => "MA").first || Factory(:state, :abbreviation => "MA")
或者我应该播种这些数据?
答案 0 :(得分:3)
如果使用rake seed任务,它只会将其添加到数据库中。但是,许多事情,比如db:test:prepare任务,将删除数据库中的所有记录,因此种子任务将无效。
您的工厂方法看起来不错,但我建议您将代码放在一对括号中。
a.state { State.where(:abbreviation => "MA").first || Factory(:state, :abbreviation => "MA") }
每次调用工厂时都会重新运行,并且会阻止在数据库中创建重复项。
答案 1 :(得分:1)
使用工厂女孩,它已经做了耙子做的事。
如果你问我,对于这个特殊情况(暗示你已经在使用工厂女孩),你应该使用耙子。我给你一个更大的NO。这会使您的组织因测试而中断。