覆盖宝石参数

时间:2016-03-04 19:19:43

标签: ruby-on-rails-4 spree

我正在使用Spree Commerce 3-0-stable作为电子商务应用,我正在尝试覆盖默认的Order前缀,但似乎找不到合适的方法来执行此操作。 gem设置像这样的前缀

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上完成的,我有点迷失。

提前致谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

在你的spree.rb中添加,

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