シナリオレール移行バージョンの互換性
生産/ステージングコードはコードのバージョンX
バージョンX
# order model
class Order < ActiveRecord::Base
has_many :payment_transactions
# has column for check_number
def update_report
ReportTable.where(:order_id => id).first.update_attributes(:check_number => check_number)
end
end
# payment_transaction model
class PaymentTransaction < ActiveRecord::Base
end
版コードのX + 5
# migration
Order.all.map{|x| x.update_report }
であります
バージョンX + 10(現在)
0123私は、最新バージョン(X + 10)にステージング環境でコードを更新し、移行を実行すると、それはこのdef check_number
self.payment_transactions.where(:method => 'check').blank? ? nil : self.payment_transactions.where(:method => 'check').first.check_number
end
とpayment_transactionますを実行しようとするため
# migration
add_column :payment_transactions, :check_number, :integer
# order model
class Order < ActiveRecord::Base
has_many :payment_transactions
# moved the column check_number to payment_transactions
def check_number
self.payment_transactions.where(:method => 'check').blank? ? nil : self.payment_transactions.where(:method => 'check').first.check_number
end
def update_report
ReportTable.where(:order_id => id).first.update_attributes(:check_number => check_number)
end
end
# payment_transaction model
class PaymentTransaction < ActiveRecord::Base
# has column for check_number
end
は今、X + 5の移行が失敗しますX + 10移行までcheck_numberフィールドを取得しないでください。
これを処理するにはどうすればよいですか?
このアプローチの問題は、私は更新の簡単なバージョンを追加することです報告する。そのはるかに複雑なことです。 – Addy