簡體   English   中英

如何從Ruby中的模塊覆蓋現有實例方法?

[英]How can I overwrite an existing instance method from a module in Ruby?

我知道我可以向模型中添加新方法,但似乎無法覆蓋現有方法。 這就是我所擁有的

在我的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)

我想讓插件中的方法覆蓋模型中的方法。 任何想法或參考都很好,似乎找不到很好的參考。

謝謝!

Ĵ

聲明類成員的順序很重要。

您是在self.active 之前執行插件的include嗎? 方法已聲明...模型聲明始終優先,因為它是在以后聲明的。

您將不得不訴諸以下內容:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM