从Ruby中的对象检索类名

时间:2010-06-26 21:55:06

标签: ruby-on-rails ruby

我正在尝试检索对象的类名。当我尝试使用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返回相同的输出。

请告诉我,我做错了什么,价值是否会改变。

感谢。

4 个答案:

答案 0 :(得分:8)

首先,您可以使用object.class.name将对象的类名称作为字符串。

您的第二个调用返回“String”的原因只是您调用Question.classname(q)并返回"Question",然后调用Question.classrating("Question")返回“String”,因为"Question"是一个字符串。

答案 1 :(得分:1)

首先,classrating实际上与classname相同。所以你基本上在做:

classname(classname(Question.new))

您将返回类名q的类名。 qQuestion,因此班级名称为"Question""Question"String,因此其类名为"String"

答案 2 :(得分:1)

Question.classname返回字符串“Question”。该字符串的类型显然是字符串。 这就是你问的问题吗?

答案 3 :(得分:0)

代码错了。我必须在分类方法中没有classname方法.Damn:D。遗憾