ruby-on-rails - 打开Spree::User类并添加功能而不丢失现有功能

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

我想将 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/

相关文章:

ruby-on-rails - 如何将 JSON 数组与 Rails JSON 列中的对象一起保存?

ruby-on-rails - 如何禁用 Rails 4 中的所有 CLI 测试日志?

mysql - rails : Performance issue with joining of records

ruby-on-rails - 如何处理 Rails 中已弃用 Assets 的路由?

ruby-on-rails - fields_for、formtastic、ActiveMerchant 和验证错误

ruby-on-rails - 从参与事件的数据库中获取所有用户

Jquery token 输入 : Turning a belongs_to select menu into the token field

ruby-on-rails - 自定义 RESTful 资源的 url_for(复合键;不仅仅是 id)

ruby-on-rails - ruby on Rails 多元化有帮助吗?

ruby-on-rails - 对于具有大量 "realtime"页面更新(来自 Rails 背景)的网站,可以使用什么工具?