如何从Ruby中的模块覆盖现有的实例方法?

时间:2010-11-18 22:11:40

标签: ruby-on-rails

我知道我可以为模型添加新方法,但我似乎无法覆盖现有方法。这就是我所拥有的

在我的User.rb

include ExtraMethods
def is_invisible?
  true unless self.active?
end

在我的模块中

module ExtraMethods
  def self.included(base)
    base.extend(ClassMethods)
  end

  module ClassMethods
    def user_extra_methods
      include ExtraMethods::InstanceMethods
    end
  end
  module InstanceMethods
    def is_invisible?
      true unless self.active? || self.admin?
    end
  end
end

ActiveRecord::Base.send(:include, ExtraMethods)
User.send(:user_extra_methods)

我想要发生的是插件中的方法覆盖模型中的方法。任何想法或参考都会很棒,似乎无法找到一个很好的参考。

谢谢!

Ĵ

1 个答案:

答案 0 :(得分:1)

宣布班级成员的顺序非常重要。

您是否正在执行插件的include self.active?方法被声明...模型声明将始终优先,因为它是稍后声明的。

你必须诉诸这样的事情:

http://weblog.rubyonrails.org/2006/4/26/new-in-rails-module-alias_method_chain