首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails循环未完成操作

Rails循环未完成操作
EN

Stack Overflow用户
提问于 2014-01-04 09:23:17
回答 1查看 59关注 0票数 0

我有个奇怪的问题,我有两个模范动作。一种是为新用户创造价格记录,另一种是为所有已经存在的用户创造价格记录,如下所示;

代码语言:javascript
复制
   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

然后跳过其他的。为什么?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-04 12:04:19

就我个人而言,我认为您的方法是臃肿的,这可能是您有错误的原因

查看您的代码,我会在after_create模型中使用一个User回调

代码语言:javascript
复制
#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方法时,如下所示:

代码语言:javascript
复制
   #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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20919150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档