创建 rails 迁移并根据模型中的方法填充现有值
Creating a rails migration and and populated existing values based off of a method within a model
我对一种方法进行了更改,该方法定义了我想添加到数据库中的特定值。然后我创建了一个迁移以增加该值。然而,我遇到的问题是,通过我所做的,它填充了任何新值,但我有几百个旧值需要填充,但我一直无法填充这些值。
这是我的代码,这是一个名为 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
在迁移中没有被识别,所以我无法让它被识别。
如果有人能看一下,我将不胜感激!
如果 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
,但这只是一个提示,与问题没有直接关系.
我对一种方法进行了更改,该方法定义了我想添加到数据库中的特定值。然后我创建了一个迁移以增加该值。然而,我遇到的问题是,通过我所做的,它填充了任何新值,但我有几百个旧值需要填充,但我一直无法填充这些值。
这是我的代码,这是一个名为 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
在迁移中没有被识别,所以我无法让它被识别。
如果有人能看一下,我将不胜感激!
如果 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
,但这只是一个提示,与问题没有直接关系.