2016-03-04 85 views
1

我使用的是Spree Commerce 3-0-stable的电子商务应用程序,我试图覆盖默认Order前缀,但似乎无法找到合适的方法来执行此操作。宝石设置这样覆盖宝石参数

include Spree::Core::NumberGenerator.new(prefix: 'R')

前缀这里的整个文件https://github.com/spree/spree/blob/master/core/app/models/spree/order.rb#L16

而且NumberGenerator帮手是在这里: https://github.com/spree/spree/blob/master/core/lib/spree/core/number_generator.rb

什么会改变这个前缀的最佳方式是什么?由于初始化直接在include上完成,所以我有点迷茫。

在此先感谢。

回答

0

从我在狂欢点看法的人应该在脸上的代码被掌掴......

从来没有少,我认为你可以很容易地改变它。我试图创建一个最小的有用的例子,你

class NumberGenerator < Module 
    attr_accessor :prefix 

    def initialize(options) 
    @prefix = options.fetch(:prefix) 
    end 

    def included(klazz) 
    number_generator = self 
    klazz.class_eval do 
     define_singleton_method(:number_generator) { number_generator } 
    end 
    end 
end 

class Order 
    include NumberGenerator.new(prefix: 'R') 
end 

puts Order.number_generator.prefix # => R 
Order.number_generator.prefix = 'Q' 
puts Order.number_generator.prefix # => Q 
0

在你spree.rb只需添加,

Spree::Order.number_generator.prefix = 'Q'