ことの可能なロールバックが付きレール4またはレール5のchange_columnsでの移行だ:私は私はRailsの4にchange_columnをロールバックし、鉄道できます5
def change
change_column etc
end
、代わりの方法を上下に使用する必要がありますか?
ことの可能なロールバックが付きレール4またはレール5のchange_columnsでの移行だ:私は私はRailsの4にchange_columnをロールバックし、鉄道できます5
def change
change_column etc
end
、代わりの方法を上下に使用する必要がありますか?
change_column
デフォルトでは元に戻すことはできません。 Railsは移行の列定義を知ることができないため、元の定義にロールバックすることはできません。
このため、Rails 4から始めると、Railsにnescsessary情報を提供することができます。これは、その後up
とdown
を使用して、より複雑なようで、一見
def change
reversible do |dir|
dir.up do
change_column :users, :score, :decimal, precision: 6, scale: 2
end
dir.down do
change_column :users, :score, :decimal, precision: 4, scale: 2
end
end
: それはreversible方法が何のためにあるのかです。利点は、可逆的な移行と組み合わせることができることです。
つまり、あなたがテーブルにフィールドの束を追加し、に沿って視野を変更する必要があり、あなたはクリーンでコンパクトな移行を持っているreversible
と一緒change_table
とadd_column
を使用することができます場合:
def change
change_table :users do |t|
t.string :address
t.date :birthday
# ...
end
reversible do |dir|
dir.up do
change_column :users, :score, :decimal, precision: 6, scale: 2
end
dir.down do
change_column :users, :score, :decimal, precision: 4, scale: 2
end
end
以前の移行を元に戻すには、変更を使用しても問題ありません。
そうでもない、私の場合change_column rails alertsでロールバックを試してください。この移行では、change_columnが使用されますが、これは自動的に元に戻すことはできません。 –
はい、変更ステートメントで何が行われているかによって異なります。たとえば、列を追加すると、他のアクションと違って、レールが理解できるリバーシブルアクションウィッチがあります。 –
それが有するレール4本の又は レール5にchange_columnsと移動可能ロールバックです:はい、空(ならびに正しいないとマイグレーションをロールバックすることが可能である
def change end
-empty)change
メソッド。
実際に何かがある場合、削除した列のタイプを指定しなかった場合は、たとえばremove_column
などの移行を元に戻せないことがあります。
change
の方法では、たとえば、change_column
があるとします。 Railsは、どのタイプ/名前/どのカラムを変更前に持っていたのですか?down
メソッドからではありません。 :)
したがって、できるだけ明示的にすることをお勧めしますので、up
とdown
を使用すると、非常に良い(実際には最高の)アイデアです。
私は自分自身をよく表現していませんでした。私は質問を更新しました –
@MatheusSilva、多分あなたはしませんでしたが、私はそう思いました:)アップ/ダウン+を使用することを推奨しました。 –
ありがとうございます。 Railsの新しいバージョンは、変更が削除または名前変更のときに元に戻すことができますが、change_columnについては見つかりませんでした。 –
Thanks、私はchange_columnとrailsでロールバックを試みましたこの移行ではchange_columnが使用されますが、これは自動的に元に戻すことはできません。 –