我有一个带有几个外键的 Store 模型。我有 state_id、country_id、currency_id、timezone_id 等...我应该为其中的每一个创建一个工厂吗?然后在 Store 的工厂中执行以下操作:
a.state State.where(:abbreviation => "MA").first || Factory(:state, :abbreviation => "MA")
还是我应该只播种这些数据?
我有一个带有几个外键的 Store 模型。我有 state_id、country_id、currency_id、timezone_id 等...我应该为其中的每一个创建一个工厂吗?然后在 Store 的工厂中执行以下操作:
a.state State.where(:abbreviation => "MA").first || Factory(:state, :abbreviation => "MA")
还是我应该只播种这些数据?
如果您使用 rake seed 任务,它只会将其添加到数据库中。但是,很多事情,比如 db:test:prepare 任务,会从数据库中删除所有记录,所以种子任务不会生效。
您的工厂方法看起来不错,但我建议您将代码放在一对大括号中。
a.state { State.where(:abbreviation => "MA").first || Factory(:state, :abbreviation => "MA") }
这将在每次调用工厂时重新运行,并防止在数据库中创建重复项。
使用工厂女孩,它已经完成了耙子的工作。
如果您问我,对于这种特殊情况(暗示您已经在使用工厂女孩),您应该使用 rake seed。我给你一个更大的NO。这会破坏您的组织与您的测试。