打开 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。
我想将 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。