我正在尝试检索对象的类名。当我尝试使用const_get时,我得到整个模型的表结构。所以我使用了以下代码。
代码
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时,它返回Question,当我从Question.classrating调用相同的输入时,它返回String。我只是从Question.classname返回相同的输出。
请告诉我,我做错了什么,价值是否会改变。
感谢。
答案 0 :(得分:8)
首先,您可以使用object.class.name
将对象的类名称作为字符串。
您的第二个调用返回“String”的原因只是您调用Question.classname(q)
并返回"Question"
,然后调用Question.classrating("Question")
返回“String”,因为"Question"
是一个字符串。
答案 1 :(得分:1)
首先,classrating
实际上与classname
相同。所以你基本上在做:
classname(classname(Question.new))
您将返回类名q
的类名。 q
是Question
,因此班级名称为"Question"
。 "Question"
是String
,因此其类名为"String"
。
答案 2 :(得分:1)
Question.classname返回字符串“Question”。该字符串的类型显然是字符串。 这就是你问的问题吗?
答案 3 :(得分:0)
代码错了。我必须在分类方法中没有classname方法.Damn:D。遗憾