0

我实际上面临一个关于数据库迁移及其种子的大问题。我有一个formes包含 2 个字段的表,name并且country_id. 我最近需要添加一个code字段 inot 它,所以我做了:

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:NilClasson@contact.forme.code

4

3 回答 3

1

好的,所以我终于让它工作了。我正在使用 :

rake db:setup

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

感谢大家的帮助

于 2013-09-19T09:35:00.370 回答
0

如果不使用country id,而是在创建Forme 时引用country 对象本身怎么办?

country = Country.create!( code: 'US', name: 'USA' )    
Forme.delete_all
Forme.create!( name: '-', country: country, code: '-' )
于 2013-09-19T08:40:55.640 回答
0

我总是喜欢对seeds.rb 使用tap方法。这有效:

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

进入该块后,即可使用 country 对象,因此您可以关联“forme”和“country”。

于 2013-09-19T08:46:49.253 回答