2009-05-05 4 views
317

ActiveRecord 객체에서 클래스 이름을 가져 오는 방법은 무엇입니까?Ruby 클래스의 이름은 어떻게 얻을 수 있습니까?

나는이 :

result = User.find(1) 

내가 시도 :

result.class 
# => User(id: integer, name: string ...) 
result.to_s 
# => #<User:0x3d07cdc>" 

내가 문자열 (이 경우 User)에서, 단지 클래스 이름이 필요합니다. 거기에 대한 방법이 있습니까?

나는 이것이 아주 기본적인 것임을 알고 있지만, 레일즈와 루비의 문서를 모두 찾았습니다. 찾을 수 없었습니다.

+1

@Oliver N을 : 사용 ActiveRecord 객체의 경우입니다. –

답변

604

당신은 객체의 클래스에 .name를 호출 할 :

result.class.name 
+3

"Module :: SubModule :: Class"는 "Class"를 가져 오는 방법입니다. –

+22

@Abe :'result.class.name.split (':: ') .last' –

+72

@Abe : 심지어 청소기 (ActiveSupport) :'result.class.name.demodulize' – pseidemann

31

result.class.to_sresult.class.name 작업 모두를.

+28

개념적으로 #name은 이름을 반환하고 #to_s는 문자열 표현을 반환합니다. 그냥 이름과 동일하게 발생합니다. 나는 항문 보유력에서 #name을 사용하는 것에 충실합니다. – kch

87

다음은 Daniel Rikowski 및 pseidemann의 의견에서 추출한 정답입니다. 내가

... 정답을 찾기 위해 의견을 통해 잡초해야하는 피곤 해요 당신이 레일 (ActiveSupport)를 사용하는 경우 :

result.class.name.demodulize 

당신이 POR (일반 올 - 루비)를 사용하는 경우 :

result.class.name.split('::').last 
0

제 경우에는 result.class.name과 같은 것을 사용하면 Module1::class_name 같은 것을 얻었습니다. 우리는 class_name하려면이없는 반면하지만,`개체 #의 class.inspect`는 개체 #의 class.name``와 같은 제공 정상적인 루비 객체로

result.table_name.singularize