2013-12-11 3 views
2

예를 들어 클래스를 사용하여 클래스가 고유 한 이름을 반환하도록합니다. "active_support/인플는"싱글 톤 메서드에서 클래스 이름 가져 오기

describe "self.resource" do 
    it "should be databases" do 
    Database.resource.should equal "databases" 
    end 
end 

class Database 
    def self.resource 
    self.class.to_s.tableize 
    end 
end 

이 실패합니다

expected #<String:84017460> => "databases" 
     got #<String:84018030> => "classes" 

어떻게 싱글 방법에 호출되는 클래스의 이름을 액세스 할 수 있습니까?

답변

2

이 작동합니다 :

class Database 
    def self.resource 
    to_s.tableize 
    end 
end 

문제는 당신이 Database가 속한 클래스에 to_s 전화이며, 그것은 Class 클래스입니다. 대신 로컬 self에서 to_s으로 전화해야합니다. Database입니다. self이 메시지의 기본 수신자이기 때문에 간단히 to_s.tableize으로 두어도 괜찮습니다.

1

selfclass 메서드를 호출하면 안됩니다. 싱글 톤 클래스는 이미 인스턴스가 아닌 클래스에 속합니다. 귀하의 경우에는

: 의도 한대로

self.to_s.tableize 

작동합니다.