2013-03-05 3 views
0

클래스 메서드 (레일의 메일러 메서드)를 호출하여 해당 변수의 이름을 변수에 제공하고 싶습니다. 어떻게해야합니까? 오브젝트의 경우, 우리는 send를 사용하거나, 우리는 몇 가지 값 변수에 저장된 클래스 메서드를 호출하는 방법

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

그러나 클래스 이름에 대해 아무것도 send대로 작동하지 않습니다하는 것은 객체 클래스의 인스턴스 메소드로 정의를 읽을 read_attribute을 사용할 수 있습니다.

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

답변

2

클래스는 객체 사용할 수 있습니다

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

완벽 ... :) 매력처럼 작용했습니다. –

+0

이 질문을 완전히 쓸모 없게 만들지 않습니까? 왜 귀하의 질문에 클래스에서 전송이 작동하지 않는다고 말했습니까? :/ –

+0

@MikeCampbell 실수로 OP를 비난 할 필요는 없습니다. 클래스가 객체라는 사실을 알게되고, 실제로'send'가 실제로 작동한다는 것은 좋은 업적입니다. – sawa

3

사용 eval

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

안전하지 않음을하지만 작동합니다 : 나는 send으로 작동하지 않습니다 이런 일이, 클래스에 적용 할 수 없습니다합니다.

+0

답변에는 사소한 수정이 필요하다. 고마워. –

2

당신은 할 수 있습니다 : 당신은 또한

self.class.send(:your_class_method)

+2

굉장 트릭 :) –

0

. send을 적용하는 방법에는 차이가 없습니다.

Notifier.send(action_type, self).deliver 
관련 문제