1. ホーム
  2. ruby-on-rails

[解決済み] Railsのマイグレーション:self.upとself.downの比較と変化

2023-03-22 02:01:16

質問

新しいrailsのバージョンでは、self.upとself.downのメソッドに対して"change"があるようですね。

では、マイグレーションをロールバックしなければならないときはどうなるのでしょうか?どのように実行すべきアクションを知ることができるのでしょうか?私はオンラインチュートリアルに基づき、次のメソッドを実装する必要があります。

class AddImageToUsers < ActiveRecord::Migration
  def self.up
    add_column :users, :image_file_name, :string
    add_column :users, :image_content_type, :string
    add_column :users, :image_file_size, :integer
    add_column :users, :image_updated_at, :datetime
  end

  def self.down
    remove_column :users, :image_file_name, :string
    remove_column :users, :image_content_type, :string
    remove_column :users, :image_file_size, :integer
    remove_column :users, :image_updated_at, :datetime
  end    
end

新しい変更方法を使用して同じことを行うにはどうすればよいですか?

どのように解決するのですか?

多くの操作の場合 のレールは、逆演算が何であるかを推測することができます。 を(問題なく)推測することができます。例えば、あなたの場合、以下の逆演算は何でしょうか? add_column をロールバックするときに呼び出すにはどうしたらいいでしょうか。もちろん、それは remove_column . の逆は何でしょう? create_table ? それは drop_table . ですから、このような場合、rails はロールバックする方法を知っていて、そのために down メソッドは不要です (ドキュメントでは メソッドが現在サポートされており、changeメソッドから ).

しかし、注意してください。 を定義する必要があります。 down メソッドを定義する必要があります。 例えば、10進数カラムの精度を変更した場合、ロールバック時に元の精度をどうやって推測するのでしょうか?それは不可能です。そこで、このメソッドに down メソッドを定義する必要があります。

を読むことをお勧めします。 Railsマイグレーションガイド .