我实际上面临着有关数据库迁移及其种子的重大问题。
我有一个formes
表,其中包含2个字段name
和country_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
答案 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”与“国家/地区”相关联。