在我的订单模型中,我有:
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?
但这并不能解决问题。