2014-12-10 4 views
0

Итак, у меня есть действительно увлекательная проблема метапрограмм.Преобразование 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, но как только я выхожу из подставки, это ошибки.

ответ

0

Ничего, я понял свою проблему. Ошибка возникает в строке return DateTime.parse(get_attri(object)), потому что я пытаюсь проанализировать объект ActiveSupport :: TimeWithZone в DateTime.