Итак, у меня есть действительно увлекательная проблема метапрограмм.Преобразование ActiveSupport :: Класс TimeWithZone в строку «ActiveSupport :: TimeWithZone»
Я пытаюсь проверить, что класс объекта в рубин поэтому у меня есть метод, который выглядит следующим образом:
attri = "created_at"
def convert_value_dataype(object)
klass = object.send(attri.to_sym).class.to_s
case klass
when "String"
return get_attri(object)
when "NilClass"
return nil
when "Fixnum"
return get_attri(object).to_i
when "ActiveSupport::TimeWithZone" || "DateTime"
return DateTime.parse(get_attri(object))
when "TrueClass"
return true
when "FalseClass"
return false
when "Float"
return get_attri(object).to_f
else
raise "Unkown dataype: #{klass}"
end
end
Теперь самое интересное заключается в том, что это работает, когда атрибут Я глядя на Fixnum или что-то простое, например. attri = "id", но я получаю эту ошибку при запуске кода: TypeError: нет неявного преобразования ActiveSupport :: TimeWithZone в String.
Однако, когда я запускаю это в консоли, я могу ввести user.send ("created_at" .to_sym) .class.to_s и получить правильный вывод. Есть ли что-то особенное, которое импортируется, когда я использую консоль (pry), которая не импортируется, когда я запускаю приложение?
Я также могу поместить «binding.pry» прямо над строкой «klass = ...» и называть эту точную строку, и она работает в консоли pry, но как только я выхожу из подставки, это ошибки.