Rake db:种子破坏了我的数据库

时间:2013-09-19 08:17:57

标签: ruby-on-rails database

我实际上面临着有关数据库迁移及其种子的重大问题。 我有一个formes表,其中包含2个字段namecountry_id。我最近需要添加一个code字段,所以我做了:

class AddCodeToFormes < ActiveRecord::Migration
  def change
    add_column :formes, :code, :string
  end
end

到目前为止,迁移过程成功使用rake db:migrate。然后在我的seeds文件中,我想添加新列以填充新数据。这是我的档案:

country = Country.create!( code: 'US', name: 'USA' )    
Forme.delete_all
Forme.create!( name: '-', country_id: country.id, code: '-' )
Forme.create!( name: 'item 1', country_id: country.id, code: 'PARTICULIER' )
Forme.create!( name: 'item 2', country_id: country.id, code: 'PATENTE' )
Forme.create!( name: 'item 3', country_id: country.id, code: 'SARL' )
Forme.create!( name: 'item 4', country_id: country.id, code: 'EURL' )

然后,我第一次运行rake db:seed来填写数据库。它的工作没有错误,数据成功填充到数据库中。

但是,当我尝试访问我的应用程序时,我在尝试访问关联数据时遇到错误,例如:@contact.forme.code

然后,当我重新创建数据库时,它就像一个魅力。那我做错了什么?

编辑:
我不知道,可能有用的信息是我的mysql数据库引擎是InnoDB。正如我在评论中所说,没有明显的错误,数据库看起来很好,但ActiveRecord不能再处理关联

编辑2:
如果我的code中没有seeds.rb值,则它就像魅力一样

编辑3:
Rails在访问页面时实际上给出了一个错误:undefined method 'code' for nil:NilClass

上的@contact.forme.code

3 个答案:

答案 0 :(得分:1)

好的,我终于让它有效了。我正在使用:

rake db:setup

删除数据库,创建表并播种它。现在它运作良好。显然,我们不能只使用rake db:seed本身。

感谢大家的帮助

答案 1 :(得分:0)

如果您不使用国家/地区ID,但在创建Forme时参考国家/地区对象本身会怎样?

country = Country.create!( code: 'US', name: 'USA' )    
Forme.delete_all
Forme.create!( name: '-', country: country, code: '-' )

答案 2 :(得分:0)

我总是喜欢使用tap方法进行种子.rb。这有效:

Country.create!( code: 'US', name: 'USA' ).tap do |country|
  Forme.delete_all
  Forme.create!( name: '-', country_id: country.id, code: '-' )
  Forme.create!( name: 'item 1', country_id: country.id, code: 'PARTICULIER' )
  Forme.create!( name: 'item 2', country_id: country.id, code: 'PATENTE' )
  Forme.create!( name: 'item 3', country_id: country.id, code: 'SARL' )
  Forme.create!( name: 'item 4', country_id: country.id, code: 'EURL' )
end

一旦进入该区块,国家/地区对象即可供使用,因此您可以将“forme”与“国家/地区”相关联。