[英]Extend ActiveRecord method_missing
我一直在网上浏览,发现了大量有关尝试自己的信息,但是我想在Ruby / Rails mixin中添加一点糖,它正在创建一个寻找模式的函数。 我想创建一个称为
is_a_ *
*可以是任何东西。 不管*是什么,都需要可检索,以便我可以在函数内使用它并采取相应的措施。 我必须使用method_missing吗?
这就是method_missing
用途,例如,这样的工作应该起作用:
module MyMixin
def respond_to?(method, priv=false)
(method.to_s =~ /^is_a_(\w+)$/) || super
end
def method_missing(sym, *args)
if sym.to_s =~ /^is_a_(\w+)$/
pattern = $1
# then just do something with pattern here, e.g.:
puts pattern
else
super
end
end
end
然后在您的班级中加入MyMixin
,例如:
class A
include MyMixin
end
a = A.new
a.is_a_foo
#=> "foo"
ps你并不需要严格重写respond_to?
,出于完整性考虑,我仅将其包括在内:
a.respond_to?("is_a_foo")
#=> true
a.respond_to?("is_a_bar")
#=> true
a.respond_to?("is__a_foo")
#=> false
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.