我对一个方法进行了更改,该方法定义了我想在数据库中添加的特定值。然后,我创建了一个迁移以添加到该值。然而,我遇到的问题是,我已经完成的任务,它填充了任何新的值,但我有几百个旧的值需要填充,我在填充这些值时遇到了麻烦。
这是我的代码的样子,这是一个名为OrderTransactions的模型
def set_pricing_amounts
pricing_service = PricingService.new(visit: visit)
self.base_price = pricing_service.base_price
end
base_price
是我需要的,最终是在PricingService
内创建的。我不认为我需要显示PricingService
内的任何信息(如果我告诉我的话)
我最初的迁移是这样的:
class AddedBasePriceToOrderTransactions < ActiveRecord::Migration
def change
add_column :order_transactions, :base_price, :integer
end
end
我已尝试过与此相关的内容
OrderTransaction.all.each do |product|
product.update_attributes!(:base_price => base_price)
end
这会更新我的所有订单交易,但会给它们全部值1 .....这是不正确的。
我也试过
OrderTransaction.all.each do |zg|
zg.update_attributes(base_price: PricingService(:visit, visit).base_price)
end
我觉得这可能是一种更接近的方法,但visit
在迁移中无法识别,因此我无法识别它。
如果有人可以看看这个,我真的很感激!
答案 0 :(得分:1)
如果set_pricing_amounts
是公共方法,您可以这样做:
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有关。