マイグレーション中に実行される独自のタイムスタンプメソッドを作成しようとしています。その場にあるものが、フィールドにNOT_NULL制約を追加するようになりました。私は本当にそれを望んでいません。Rails/Rubyマイグレーション方法のタイムスタンプをオーバーライドするには
私が持っている問題は、私は複数のスキーマデータベースを持っているということです。各主要クライアントが独自のスキーマを取得する場所。新しいクライアントをオンボードにすると、新しいテナントレコードが作成され、新しく作成されたスキーマの移行が実行されます。
新しいスキーマは、もちろんデータがないことを除いて、他のスキーマのテーブルの正確なコピーとみなされます。
私が最後に行った移行は、少し古いバージョンのレールを使用していました。まだ3歳ではあるが、年を取っている。タイムスタンプを作成したとき、それらはNULL可能でした。私は(新しいレール上)先日の移行を実行したとき は...まあ、すべてのフィールドは今NOT_NULL
私はレコードが更新されたときupdated_atのが唯一の移入されたアイデアで開発されたコードを持っています...それが作成されたときではありません。 (サードパーティのアプリケーションとデータベースの "関数"がレコードを作成する).. レコードを作成するサードパーティ製のアプリケーションとデータベース関数は、新しいスキーマに落ちています... すべてのNOT_NULL制約をすべて削除しましたテーブルを手動で作成しましたが、私はマイグレーションタスクにクリーンアップを書いて、将来のすべてのテーブルが修正されるようにする必要はありません。
私は、タイムスタンプのメソッドをオーバーライドすることを考えました変更され、既存のコードを破らなかったものに戻ります。
私は、元に戻す/上書きする必要がある理由があります。
私の質問は今...どのように私はメソッドをオーバーライドするのですか?
create_table :foo do |t|
t.text :bar
t.datetime :created_at
t.datetime :updated_at
end
:
私は既に50以上の移行を行っています。私はそれらをすべてこのパラダイムに変えていきたいと思いません。私はまた、タイムスタンプの代わりに壊れたdatetimeを配置するように、足場を作成するレールのコードを変更する必要はありません。 – baash05
@daveatflowで移行を変更すると、必ず質問を入力するよりも時間がかかります:)どこで上書きするか:確実にデバッグを有効にしてレーキタスクを実行できますか? create_tableブロック内に 'debugger'呼び出しを置き、タイムスタンプ・メソッドにステップします。ファイルの場所を取得する必要があります。私は個人的にはこれをお勧めしません。これは将来のレールバージョンでも変更される可能性があるためです。 – maniek
まあ、私は50以上のマイグレーションがあると言いました。私はそれらをすべて変更しなければならず、将来のマイグレーションはすべてレールによって生成されます。また、他の人が作成した移行レールを変更しなければならないことを文書化する必要があります。デバッガのロジックは...今はそれが賢明です。将来のバージョンでの変更。私は特にそれを避けようとしています。フィールド名を変更すると(たとえば)、1つのデータベース、2つのスキーマが同一である必要がありますが、フィールド名は異なります。 – baash05