2013-03-05 41 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)

相关问题