Получение имени класса из объекта в Ruby - PullRequest
2 голосов
/ 27 июня 2010

Я пытаюсь получить имя класса объекта.Когда я попытался использовать const_get, я получаю всю структуру таблицы модели.Поэтому я использовал следующий код.

Код

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

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

Script / Console

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

8 голосов
/ 27 июня 2010

Прежде всего, вы можете просто использовать object.class.name, чтобы получить имя класса объекта в виде строки.

Причина, по которой ваш второй вызов возвращает «String», заключается просто в том, что вы вызываете Question.classname(q), который возвращает"Question" и затем вы вызываете Question.classrating("Question"), который возвращает "String", потому что "Question" является строкой.

1 голос
/ 27 июня 2010

Question.classname возвращает строку «Вопрос».Тип этой строки, очевидно, строка.Это то, что вы спрашиваете?

1 голос
/ 27 июня 2010

Во-первых, classrating фактически совпадает с classname.Итак, вы в основном делаете:

classname(classname(Question.new))

Вы возвращаете имя класса имени класса q.q - это Question, поэтому имя класса - "Question"."Question" - это String, поэтому его имя класса - "String".

0 голосов
/ 27 июня 2010

Код неверный. У меня не должно быть метода имени класса в методе классификации. Черт: D. К сожалению

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...