这里是场景导轨迁移版本兼容性
生产/分段代码是关于版本的代码为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的代码(当前)
# 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 + 10),更新代码并运行迁移,在X + 5的迁移,因为它试图运行此
def check_number
self.payment_transactions.where(:method => 'check').blank? ? nil : self.payment_transactions.where(:method => 'check').first.check_number
end
和payment_transaction会失败在X + 10迁移之前不会获取check_number字段。
最好的处理方法是什么?
这种方法的问题是,我添加更新的简单版本报告。那就更复杂了。 – Addy