0

私は実際、データベースの移行とその種に関して大きな問題に直面しています。formes2 つのフィールドを含むテーブルがあり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

そして、データベースを再作成すると、魔法のように機能します。それで、私は何を間違えましたか?

EDIT :
役立つかもしれない情報は、私の mysql データベース エンジンが InnoDB であることです。コメントで述べたように、目に見えるエラーはなく、データベースは問題ないように見えますが、ActiveRecord は関連付けを処理できなくなりました

EDIT 2: my に値が
なければ、それは魅力のように機能しますcodeseeds.rb

EDIT 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

私は常に、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 に答える
0

国 ID を使用せず、国オブジェクト自体を参照して Forme を作成するとどうなりますか?

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