[英]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.