我有一个奇怪的问题,我在这里有两个模型动作。一个是为新用户创建价格记录,另一个是为所有现有用户创建价格记录,如此处所示;
def self.initialize_price(user_id)
prices = InitialPrice.all
prices.each do |price|
user_price = Price.new(country: "#{price.country}", network: "#{price.network}",
price_eur: price.price_eur, price_ugx: price.price_ugx,
price_kes: price.price_kes, price_tzs: price.price_tzs,
price_usd: price.price_usd, user_id: user_id, prefix: "#{price.prefix}")
user_price.save
end
end
def self.update_user_prices
users = User.all
users.each do |user|
Price.initialize_price(user.id)
end
end
但是,在控制台中调用
时的第二个操作Price.update_user_prices
它只为第一个用户
创建记录user_id = 1
并跳过其他人。为什么? 谢谢
答案 0 :(得分:0)
就个人而言,我认为你的方法很臃肿,这可能是你犯错误的原因
查看您的代码,我会在User
模型中使用after_create
回调
#app/models/user.rb
Class User < ActiveRecord::Base
after_create :initialize_price
def initialize_price
InitialPrice.each do |price|
Price.create({country: price.country, network: price.network,
price_eur: price.price_eur, price_ugx: price.price_ugx,
price_kes: price.price_kes, price_tzs: price.price_tzs,
price_usd: price.price_usd, user_id: id, prefix: price.prefix})
end
end
end
我尽可能地尽力DRY代码。每次包含当地价格时,您基本上都在复制自己。我会通过更改价格表来处理它以处理价格或其他东西的货币汇率
更多强>
对您有益的事情将是instance methods & class methods
@user.instance_method
User.class_method
<强>方法强>
我认为您的问题是,当我使用class methods
instance method
方法时,您两次都在使用initialize_price
,如下所示:
#app/models/user.rb #-> User.update_prices
def self.update_prices
self.all.each do |user|
user.initialize_price
end
end
#app/models/user.rb # -> @user = User.find(15) @user.initialize_price
def initialize_price
prices = InitialPrice.all
prices.each do |price|
user_price = Price.new(country: "#{price.country}", network: "#{price.network}",
price_eur: price.price_eur, price_ugx: price.price_ugx,
price_kes: price.price_kes, price_tzs: price.price_tzs,
price_usd: price.price_usd, user_id: user_id, prefix: "#{price.prefix}")
end
update_attributes(price: price)
end