自定义Solidus库代码 - 带有可选电话号码的地址

时间:2017-03-22 13:28:21

标签: ruby-on-rails spree solidus

我试图覆盖Solidus代码并想知道我的选择是什么?

特别是我正在尝试更改地址以使手机可选。

1 个答案:

答案 0 :(得分:1)

Solidus旨在提供更好的自定义界面 - they want to avoid you opening up the Solidus/Spree classes - 因为它增加了破坏系统的可能性。

从大多数到最不喜欢的

列出的替代品
  1. 为此他们提供extension points
  2. 装饰
    • 对我们没有帮助,因为地址在Solidus库中起作用,而不是在我们的应用程序中调用的代码
  3. 模块#前置
    • app/models/spree下创建一个文件,并在必要时添加额外的spree名称空间
    • 将前置词添加到config/initializers/spree.rb
    • Prepend是对class_eval的改进,因为您可以使用super调用方法调用的非重写版本。
  4. 在实际问题中 - 没有Spree地址的扩展名,装饰者不会工作因为我们没有调用代码(比如我们编写的视图中),所以我们需要更改Spree代码与前置。

    应用程序/模型/礼包/ optional_phone_address.rb

    module Spree
      module OptionalPhoneAddress
        # require_phone?
        #   - no longer require a phone
        #   - a * no longer appears next to phone in the view
        #
        def require_phone?
          false
        end
      end
    end
    

    配置/初始化/ spree.rb

    #
    # Customization of Spree Code
    #
    
    Spree::Address.prepend Spree::OptionalPhoneAddress
    

    注意

    进一步研究