【Rails】seed-fuのデータはidを指定してあげないと重複してしまうから注意
Railsで初期データを入力のにデフォルトでrake db:seedを使う方法があります。 しかしこれは何も考えずに実行するとデータが重複してしまします。 それは後々の修正があまりにも面倒なのでseed-fuというGemを利用します。 このGemを使うと重複したデータは入力されず変更したところのみ追加や更新が行なわれます。 非常に便利です。
しかしデータを作成する際にidを指定してあげないと重複してしまうので注意です。 具体的にはこんな感じです。
Fruit.seed do |s| s.name = 'Apple' end Fruit.seed do |s| s.name = 'Orange' end Fruit.seed do |s| s.name = 'Banana' end
もしこのまま2回実行したらそれぞれ2つずつ計6個のデータが入力されてしまいます。 指定されていないidを内部でオートインクリメントしてそれぞれがまったく別のものとして認識されているのでしょうか。
そのようなことから以下のように明示的にidを指定してあげる必要があります。
index = 1 Fruit.seed do |s| s.id = index s.name = 'Apple' end index += 1 Fruit.seed do |s| s.id = index s.name = 'Orange' end index += 1 Fruit.seed do |s| s.id = index s.name = 'Banana' end
なおこの例ではindexという変数を準備しインクリメントさせています。 このようにするとそれぞれのデータに対してidが確定するため重複せずにデータを入力できるようになります。






