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

レーキシードタスクを使用する場合、データベースに追加されるだけです。ただし、db:test:prepareタスクのように、データベースからすべてのレコードが削除されるため、シードタスクは効果的ではありません。

工場でのアプローチは良さそうですが、コードを中かっこで囲むことをお勧めします。

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

これにより、ファクトリが呼び出されるたびに再実行され、データベースに重複が作成されるのを防ぎます。

于 2012-05-08T19:06:46.377 に答える
1

ファクトリーガールを使用してください、それはすでにレーキシードがすることをします。

この特別な場合(すでにファクトリーガールを使用していることを意味します)、レーキシードを使用する必要があります。私はあなたにさらに大きなNOを与えます。それはあなたのテストであなたの組織を壊します。

于 2012-05-08T19:14:08.600 に答える