2010-06-26 2 views
2

객체의 클래스 이름을 검색하려고합니다. const_get을 사용해 보았을 때, 나는 전체 모델의 테이블 구조를 얻고있다. 그래서 다음 코드를 사용했습니다.Ruby에서 객체의 클래스 이름 검색

코드

def classname(object) 
    return object.class.to_s.split("(")[0] 
    end 

    def classrating(object_id) 
    classtype = classname(object_id) 
    return classtype 
    end 

스크립트/콘솔 Question.classname가 호출

>> q = Question.new 
    => #<Question id: nil, question_info: nil, profile_id: nil, rating: nil, created_at: nil, updated_at: nil> 
    >> Question.classname(q) 
    => "Question" 
    >> Question.classrating(Question.classname(q)) 
    => "String" 
    >> q.class 
    => Question(id: integer, question_info: string, profile_id: integer, rating: integer, created_at: datetime, updated_at: datetime) 

당신이 볼 수 있듯이,이 질문과 같은 입력 내가 질문에서 호출 할 때를 반환 .classrating, 그것은 String을 반환합니다. Question.classname에서 동일한 결과를 반환하고 있습니다.

내가 뭘 잘못하고 가치가 바뀌는 지 말해 줄 수 있습니까?

감사합니다.

답변

1

우선, classrating은 실질적으로 classname과 동일합니다. 그래서 당신은 기본적으로 일을하는지 : 당신은 q의 클래스 이름의 클래스 이름을 반환하고

classname(classname(Question.new)) 

. qQuestion이므로 클래스 이름은 "Question"입니다. "Question"String이므로 클래스 이름은 "String"입니다.

1

Question.classname은 "Question"문자열을 반환합니다. 해당 문자열의 유형은 분명히 문자열입니다. 그게 당신이 묻는 것입니까?

0

코드가 잘못되었습니다. 나는 classrating method에 classname 메소드를 가져서는 안된다. Dam : D. 죄송합니다.

8

먼저 object.class.name을 사용하여 개체의 클래스 이름을 문자열로 가져올 수 있습니다.

두 번째 호출이 반환 "문자열"당신이 "Question"을 반환 Question.classname(q)를 호출 한 다음 "Question" 문자열이기 때문에 "문자열"을 반환 Question.classrating("Question") 전화 단순히 것입니다 이유.

+0

대단히 감사합니다. :) – felix

관련 문제