私はSinatraアプリケーションでdatamapperを使用しています。私は現在、コマンドを使用して、移行を処理するためにdatamapperを使用してクラスからプロパティを削除するときにデータベースフィールドを削除します
DataMapper.finalize.auto_upgrade!
を使用しています。私は 'has_n'と 'belongs_to'の関連付けを持つ2つのクラス(アーティストとイベント)を持っていました。 'belongsed_to'というイベントは、アーティストとアーティストが関連するイベントを多数持つことができます。
Iは、モデルの元ONE_TO_MANYアソシエーションを支配クラス定義の前の部分を削除し、イベントクラスに対応するコードに
has n, :artists, :through => Resource
を添加することによってmany_to_many関係であるとの関連付けを変更アーティストクラス。新しいイベントを作成すると、エラーが発生します。
#<DataObjects::IntegrityError: events.artist_id may not be NULL
:artist_idフィールドは、2つのクラス間の元の関連付けの遺物です。新しいmany_to_many関連付けは、event.artists [i]によってアクセスされます(ここで、 'i'は、0から関連付けられたアーティスト数-1までの整数インデックスです)。どうやら、ArtistクラスとEventクラスの元の関連付けメソッドはまだありますか?私の推測では、この解決策は、datamapperに組み込まれたauto_upgradeメソッドを使用するのではなく、明示的な移行を記述することです。このタイプの変更をデータベースに処理する方法があり、auto_upgradeメソッドが機能していれば、それは素晴らしいことです!
私のモデルなどの詳細が必要な場合は、お気軽にお問い合わせください。
私はまた、ローカルでnavicatで列を削除していますが、私は明らかに英雄のアプリのために適切に動作するようにしたいと思います。 – wuliwong