2012-12-05 19 views
0

我一直在寻找网络,并发现了大量关于尝试我的信息,但是我想添加到我的Ruby/Rails mixin中的一点糖正在创建一个函数那寻找一个模式。我想创建一个名为Extend ActiveRecord method_missing

is_a_ *

其中*可以是任何基本功能。无论那个*是什么,都需要被检索,所以我可以在函数内部使用它并采取相应的行动。我必须使用method_missing吗?

+0

你能解释一下,如果对象是*(任何)或不is_a_ *方法获取? –

回答

3

这是什么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" 

附:你不严格需要重写respond_to?,我只是包括它的完整性:

a.respond_to?("is_a_foo") 
#=> true 
a.respond_to?("is_a_bar") 
#=> true 
a.respond_to?("is__a_foo") 
#=> false