无限循环,是什么原因造成的?

时间:2019-08-12 21:43:42

标签: ruby-on-rails ruby

在我的订单模型中,我有:

validates_uniqueness_of :store_order_id, on: :create
before_validation :generate_id, on: :create if :manual_order?


def manual_order?
  order_type == "manual"
end

def generate_id
  begin
    self.store_order_id = "M-#{(SecureRandom.random_number(9e5) + 1e5).to_i}"
  end while self.class.find_by(store_order_id: store_order_id)
end

控制器创建方法:

 def create
    @order = Order.new
    @order.order_type = "manual"

    respond_to do |format|
      if @order.save!

由于某些原因,这导致:generate_id的循环

是什么原因造成的?

我使用类似的代码为每个订单生成令牌,唯一的区别是我不像在validates_uniquness_of中那样使用:generate_id。但是我不知道这是怎么造成这个循环的?

我确实需要validates_uniqueness_of :store_order_id, on: :create,因为它还用于webhook id,以防webhook触发两次(有时也会触发)。我这样做是为了避免多个相同的记录。由于具有这种唯一性,因此当我创建手动订单时,因为store_order_id必须是唯一的,所以它不会保存。因此,我创建了generate_id方法,但是遇到了问题。

假设可能是唯一性引起的,因为与我多次使用的代码没有区别,我尝试过:

validates_uniqueness_of :store_order_id, on: :create unless :manual_order?

但这并不能解决问题。

0 个答案:

没有答案