while循环在rails中创建多个记录

Sli*_*k23 3 ruby ruby-on-rails ruby-on-rails-3

我正在构建一个用户可以购买跟踪号码的应用程序.我有一个订单模型和一个订单交易模型.如果订单事务从网关成功返回,我使用after_save回调来触发创建跟踪号并将它们插入数据库的方法.有时用户只订购一个,但如果他们订购的不止一个,我似乎无法创建和插入多个记录.

这就是我正在使用的东西 - 我从来没有像这样使用过循环,所以我不确定我做错了什么.

def create_trackables
      if self.success == true
        @order = Order.find(order_id)
        @start = 0
        while @start < @order.total_tokens
          @trackable_token = Tracker.create_trackable_token
          @start += 1
          @trackable ||= Tracker.new(
            :user_id => @current_user,
            :token => @trackable_token,
            :order_id => order_id
            )
        @trackable.save 
        end
      end
    end
Run Code Online (Sandbox Code Playgroud)

klo*_*ner 6

dmarkow是对的,你应该使用trackable而不是@trackable你也应该使用=而不是||=.您也可以使用create.这是我写的方式:

 def create_trackables
    return unless self.success
    order = Order.find(order_id) #you shouldn't need this line if it has_one :order
    1.upto(order.total_tokens) do
      Tracker.create!(
                     :user_id => @current_user,
                     :token => Tracker.create_trackable_token,
                     :order_id => order_id
                     )
    end
  end
Run Code Online (Sandbox Code Playgroud)