打开Spree :: User类并添加函数而不会丢失现有函数

时间:2016-01-24 15:12:01

标签: ruby-on-rails ruby ruby-on-rails-4 metaprogramming spree

我想将Spree::User方法添加到Spree::User类。

module Spree class User < Spree::Base include Spree::UserMethods def vendor? self.role_users.any? { |ru| ru.role.name == 'vendor' } end end end 在我的Rails应用程序使用的solidus gem中定义。我不想触摸这段代码,而是打开课程并在主Rails应用程序中将我的方法附加到它。

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

admin?

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

有没有办法可以扩展现有类而无需手动复制所有方法?

1 个答案:

答案 0 :(得分:3)

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

它只会将您的单个方法添加到现有类中。