我想将 vendor?
方法添加到 Spree::User
类中。
Spree::User
是在我的 Rails 应用程序使用的 Solidus gem 中定义的。我不想触及此代码,而是打开该类并将我的方法附加到主 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?
之类的方法。
有没有一种方法可以扩展现有类,而无需手动复制其所有方法?
最佳答案
在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
它只会将您的单个方法添加到现有类中。
关于ruby-on-rails - 打开Spree::User类并添加功能而不丢失现有功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34977405/