大礼包3.1:增加订单号
Spree 3.1: Increment Order number
我正尝试在 Spree 3.1 中增加订单号。
我只有这个:
Spree::Order.class_eval do
before_validation(on: :create) do
self.number = Spree::Core::NumberGenerator.new(prefix: 'S').send(:generate_permalink, Spree::Order)
end
end
但它只是更改前缀。
我应该如何重写 new_candidate
以获得正确的结果?
#lib/spree/core/number_generator.rb
def new_candidate(length)
@prefix + length.times.map { @candidates.sample(random: @random) }.join
end
你可以试试这个:
def new_candidate(host)
max_number = host.maximum(:number) || STARTING_NUMBER
@prefix + (max_number.gsub(@prefix, '').to_i + 1).to_s
end
def generate_permalink(host)
new_candidate(host)
end
您需要在生成器 class 中定义 STARTING_NUMBER 常量。此外,您将不再需要 @length
实例变量。
我最近在做一个类似的任务,得到一个包含订单日期的订单号 + 一个随机生成的数字(为了唯一性)。
为了实现这一点,我在 models/spree
中添加了一个 order_decorator.rb
并覆盖了 generate_number
方法:
// First i redefine the length for my random number
NUMBER_LENGTH = 5
def generate_number(options = {})
options[:length] ||= NUMBER_LENGTH
date = Date.today.strftime('%d-%m-%Y')
possible = (0..9).to_a
random = "-#{(0...options[:length]).map { possible.shuffle.first }.join}"
self.number ||= date + random
end
我不喜欢随机数的生成(我会为此使用 `SecureRandom),但我最初将它留在 Spree 中,因为它可以很好地满足我的需要。
在您的情况下,您可以在方法中添加使数字递增所需的代码。
希望对您有所帮助!
干杯
我正尝试在 Spree 3.1 中增加订单号。
我只有这个:
Spree::Order.class_eval do
before_validation(on: :create) do
self.number = Spree::Core::NumberGenerator.new(prefix: 'S').send(:generate_permalink, Spree::Order)
end
end
但它只是更改前缀。
我应该如何重写 new_candidate
以获得正确的结果?
#lib/spree/core/number_generator.rb
def new_candidate(length)
@prefix + length.times.map { @candidates.sample(random: @random) }.join
end
你可以试试这个:
def new_candidate(host)
max_number = host.maximum(:number) || STARTING_NUMBER
@prefix + (max_number.gsub(@prefix, '').to_i + 1).to_s
end
def generate_permalink(host)
new_candidate(host)
end
您需要在生成器 class 中定义 STARTING_NUMBER 常量。此外,您将不再需要 @length
实例变量。
我最近在做一个类似的任务,得到一个包含订单日期的订单号 + 一个随机生成的数字(为了唯一性)。
为了实现这一点,我在 models/spree
中添加了一个 order_decorator.rb
并覆盖了 generate_number
方法:
// First i redefine the length for my random number
NUMBER_LENGTH = 5
def generate_number(options = {})
options[:length] ||= NUMBER_LENGTH
date = Date.today.strftime('%d-%m-%Y')
possible = (0..9).to_a
random = "-#{(0...options[:length]).map { possible.shuffle.first }.join}"
self.number ||= date + random
end
我不喜欢随机数的生成(我会为此使用 `SecureRandom),但我最初将它留在 Spree 中,因为它可以很好地满足我的需要。
在您的情况下,您可以在方法中添加使数字递增所需的代码。
希望对您有所帮助!
干杯