基本上我使用的是某些引擎,其模型类使用了一些像acts_as_x
这样的宝石。要覆盖模型,我使用class_eval,但我不需要acts_as_x
功能,因为它会进行繁重的计算,而我并不需要。
无论如何都要禁用此功能?
谢谢,
更新:
# origin model
class Model < ActiveRecord::Base
acts_as_x
end
# overriding model
Model.class_eval do
acts_as_y
# it musts remove acts_as_x
end
答案 0 :(得分:0)
如果你不想使用某些东西。不要求它。 或者remove_method,http://ruby-doc.org/core-2.3.0/Module.html#method-i-remove_method。
答案 1 :(得分:0)
class Roman
def roman_to_int(str)
# ...
end
def method_missing(methId)
str = methId.id2name
roman_to_int(str)
end
end
r = Roman.new
r.iv #=> 4
r.xxiii #=> 23
r.mm #=> 2000
在ruby doc中,当r的实例找不到方法时。
它将调用method_missing和输入名称。
处理您的方法,然后指定要执行的方法。
如果您使用ActiveRecord,find_by_xxx
是method_missing。