我有个奇怪的问题,我有两个模范动作。一种是为新用户创造价格记录,另一种是为所有已经存在的用户创造价格记录,如下所示;
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
然后跳过其他的。为什么?谢谢
发布于 2014-01-04 12:04:19
就我个人而言,我认为您的方法是臃肿的,这可能是您有错误的原因
查看您的代码,我会在after_create模型中使用一个User回调
#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我会尽我最大的努力尽可能多地对代码进行干的处理。你基本上是在复制你自己每一次你包括那些当地的价格。我会通过改变价格表来处理价格的货币汇率什么的。
More
对你有益的东西是实例方法和类方法
@user.instance_method的实例上。User.class_method。方法
我认为您的问题是,您两次都在使用class methods,当我使用instance method for 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)
endhttps://stackoverflow.com/questions/20919150
复制相似问题