2013-03-05 45 views
0

如果我想調用一個類方法(rails中的郵件程序方法),請在變量中提供其名稱。我怎樣才能做到這一點?對於對象,我們可以使用send,或者我們可以使用read_attribute閱讀一些值如何調用存儲在變量中的類方法

my_object.send("#{self.action_type(self)}") 
my_object.read_attribute("#{self.action_type}_email") 

但對於類名,沒有什麼工作爲send被定義爲對象類的實例方法。我想是這樣的,它不會因爲send工作,不能在類應用:

Notifier.send("#{self.action_type(self)}").deliver 

回答

2

類是對象。你如何申請send沒有區別。

Notifier.send(action_type, self).deliver 
+0

完美.. :)像魅力工作 – 2013-03-05 13:28:41

+0

這不會使這個問題完全沒有價值嗎?你爲什麼在你的問題中說發送對班級不起作用? :/ – 2013-03-05 13:46:00

+0

@MikeCampbell你不需要責怪OP的錯誤。知道類是對象,因此「發送」確實對它們有效,這是一個很好的成就。 – sawa 2013-03-05 14:32:08

3

使用eval

eval("Notifier.#{self.action_type}(self).deliver") 

不是安全的,但它應該工作。

+0

答案需要一個小的修復,然後它的工作..在答案做了修改。非常感謝。 – 2013-03-05 13:04:26

2

你也可以這樣做:

method = Notifier.method(action_type) 
method.call(self).deliver 
+2

真棒訣竅:) – 2013-03-05 13:05:11

0

你也可以使用

self.class.send(:your_class_method)

相關問題