好的,我这里有一个非常吸引人的元编程问题。
我正在尝试检查一个对象的类在ruby中是什么,所以我有一个如下所示的方法:
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或一些简单的东西时,这是可行的。但是当我运行代码: TypeError:没有将ActiveSupport::TimeWithZone隐式转换为String时,就会得到这个错误。
但是,当我在控制台中运行这个命令时,我可以输入user.send("created_at".to_sym).class.to_s,并得到正确的输出。当我使用控制台(pry)时,有什么特别的东西在我运行应用程序时没有被导入?
我也可以把'binding.pry‘写在"klass =.“线上。然后调用确切的行,它在pry控制台中工作,但是一旦我退出pry控制台,它就会出错。
发布于 2014-12-10 20:28:27
不介意,我解决了我的问题。这个错误发生在行return DateTime.parse(get_attri(object))中,因为我试图将ActiveSupport::TimeWithZone对象解析为一个DateTime。
https://stackoverflow.com/questions/27410119
复制相似问题