打开 Spree::User class 并在不丢失现有功能的情况下添加功能

Open Spree::User class and add functions without losing existing functions

我想将 vendor? 方法添加到 Spree::User class。

Spree::User 在我的 Rails 应用程序使用的固相线 gem 中定义。我不想触及这段代码,而是打开 class 并将我的方法附加到主 Rails 应用程序中。

例如:RAILS_ROOT/app/models/spree/user.rb

module Spree
  class User < Spree::Base

    include Spree::UserMethods

    def vendor?
      self.role_users.any? { |ru| ru.role.name == 'vendor' }
    end

  end    
end

然而,这不包括在我创建补丁之前存在的 admin? 等方法。

有没有一种方法可以扩展现有的 class 而无需手动复制所有方法?

config/initializers 目录下创建一个文件:

# config/initializers/spree_user.rb

Spree::User.class_eval do
  def vendor?
    self.role_users.any? { |ru| ru.role.name == 'vendor' }
  end
end

它只会将您的单一方法添加到现有的 class。