关于数据库seed.rb的问题

时间:2011-04-01 08:13:45

标签: ruby-on-rails ruby-on-rails-3

如果我在db / seeds.rb中定义了以下代码,

default_car=Car.create({:name=>'TOYOTA'})
User.create({:username=>'default_user', car_id=>default_car.id})

我知道当我运行“ rake db:seed ”时,default_caruser个实例将存储到数据库中。

我的问题是,如果我再次一次又一次地运行' rake db:seed ' (多次),将相同的实例存储到具有多个数据库的数据库中副本或它只将实例保存到数据库一次,无论我运行多少次 rake db:seed

3 个答案:

答案 0 :(得分:5)

更好的解决方案:

default_car = Car.find_or_create_by_name 'TOYOTA'
user = User.find_or_create_by_username 'default_user'
user.car = default_car
user.save

这样你可以多次运行“rake db:seed”,而不必每次都手动删除数据库。

答案 1 :(得分:0)

这是拥有单个种子文件的限制。随着应用程序的增长,我发现这令人沮丧,你经常想要添加新的种子数据,所以你最终要么做Pascal的建议,要么创建带有数据的迁移,或者用rake任务来加载种子。为了解决这个问题,我敲了seedbank。因此,我将此与Pascals方法相结合,以便我可以重新运行种子,但如果我愿意,也可以针对特定的种子。

答案 2 :(得分:-1)

如果您允许重复值,

取决于您的模型。如果你不这样做会引发错误。你所做的是在通过rake db:resetdb

运行种子之前先清除你的数据库