2011-07-03 16 views
1

シナリオレール移行バージョンの互換性

生産/ステージングコードはコードのバージョン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フィールドを取得しないでください。

これを処理するにはどうすればよいですか?

答えて

0

IはXに移動するX + 5

Order.all.map{|x| x.update_report } 

でこのコード形式の移行を移動させることになった+ 10

# migration 
add_column :payment_transactions, :check_number, :integer 
Order.all.map{|x| x.update_report } 
0

update_reportコールをX + 5マイグレーションでコメントし、実行して、それが完了したらレールコンソールでスニペットを実行します。

または直接SQLクエリを実行するための移行を変更する:あなたは、移行中のモデルを避けるためにX + 5の移行を変更できない場合

execute "update report_tables set check_number = x.check_number ...." 
0

を:

Order.all.each do |o| 
    ReportTable.where(:order_id => o.id).first.update_attributes(:check_number => o.check_number) 
end 

これは、その時点で依然として存在する注文の小切手番号属性を引き続き参照します。

+0

このアプローチの問題は、私は更新の簡単なバージョンを追加することです報告する。そのはるかに複雑なことです。 – Addy

関連する問題