2017-03-10 4 views
0

데이터베이스에서 추가하려는 특정 값을 정의하는 메소드를 변경했습니다. 그런 다음 마이 그 레이션을 만들어 해당 값을 추가했습니다. 그러나 내가 가지고있는 문제는 새로운 값을 채우지 만 몇 백 개의 이전 값을 채워야하고 채워지는 데 어려움을 겪고 있다는 것입니다. 여기모델 내의 메소드를 기반으로 레일 마이 그 레이션 및 채워진 기존 값 작성

는이 모델이라고 OrderTransactions

def set_pricing_amounts 
    pricing_service = PricingService.new(visit: visit) 
    self.base_price = pricing_service.base_price 
end 

base_price 내가 궁극적으로 PricingService 내에서 생성되는, 필요로하는 무슨이다, 내 코드는 모습입니다. 내가 함께 뭔가를 시도했습니다

class AddedBasePriceToOrderTransactions < ActiveRecord::Migration 
    def change 
    add_column :order_transactions, :base_price, :integer 
    end 
end 

: 내가 처음이 같았다에서 나는 (내가 알려 경우)

내 마이그레이션을 PricingService에 어떤 주변 정보를 표시 할 필요가 있다고 생각하지 않습니다 이

OrderTransaction.all.each do |product| 
    product.update_attributes!(:base_price => base_price) 
end 

이의 라인 내 주문 거래의 모든 업데이트하지만 그들에게 정확하지 않은 한 모든 값을 ..... 제공합니다.

나는 또한이 더 가까이 접근 할 수 같은 느낌

OrderTransaction.all.each do |zg| 
    zg.update_attributes(base_price: PricingService(:visit, visit).base_price) 
end 

을 시도했다, 그러나 visit는 마이그레이션 내에서 인식되지 않고, 그래서 그것을 인식 할 수 없습니다.

누구든지이 부분을 살펴볼 수 있다면 정말 고맙겠습니다.

답변

1

set_pricing_amounts 당신이 할 수있는 public 메소드 인 경우 :

OrderTransaction.all.each do |product| 
    product.set_pricing_amounts 
    product.save! 
end 

(비공개 인 경우 또는, 당신은 product.send(:set_pricing_amounts)을 할 수있는 대신)

다음이

당신은 가격 서비스를 호출 할 경우, 작동합니다 :

OrderTransaction.all.each do |order| 
    order.update_attributes base_price: PricingService.new(visit: order.visit).base_price 
end 

사이드 참고 : 마이그레이션하는 기록을 많이 가지고 있다면, 대신 OrderTransaction.all.find_each를 사용하여 보라 OrderTransaction.all.each인데, 그것은 단지 팁이며 questino와 직접적인 관련이 없습니다.

+0

안녕하세요, 고마워요. 이것이 내가 필요로했던 것인데, 나는 이것이 어떻게 작동 할 것인지에 대해 과도하게 생각하고 있었다. – kdweber89

+0

여러분을 환영합니다! :) –