2010-06-26 37 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 

腳本/控制檯

>> 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) 

正如你可以看到,當Question.classname被調用,它返回的問題,當相同的輸入我的問題叫.classrating,它返回String。我只是從Question.classname返回相同的輸出。

你能告訴我,我做錯了什麼,價值被改變了。

謝謝。

回答

1

首先,classrating實際上與classname相同。所以你基本上是這樣做的:

classname(classname(Question.new)) 

你返回的q類名的類名。 qQuestion,所以班級名稱是"Question""Question"String,所以它的類名是"String"

1

Question.classname返回字符串「Question」。該字符串的類型顯然是字符串。 這就是你要求的嗎?

0

代碼錯誤。我不能在分類方法中使用類名方法.Damn:D。對不起

8

首先,您可以使用object.class.name以字符串形式獲取對象的類名。

的原因,你的第二個電話返回「字符串」很簡單,你叫Question.classname(q)返回"Question"然後調用Question.classrating("Question")返回「字符串」,因爲"Question"是一個字符串。

+0

非常感謝你:) – felix 2010-06-26 22:08:41