2012-12-05 72 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