【发布时间】:2014-12-10 20:22:02
【问题描述】:
好的,我有一个非常有趣的元编程问题。
我正在尝试检查对象的类在 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 或一些简单的东西时,它可以工作,例如。 attri = "id" 但运行代码时出现此错误:TypeError: no implicit conversion of ActiveSupport::TimeWithZone into String.
但是,当我在控制台中运行它时,我可以输入 user.send("created_at".to_sym).class.to_s 并得到正确的输出。当我使用运行应用程序时未导入的控制台(pry)时,是否会导入一些特殊的东西?
我也可以将 'binding.pry' 放在“klass = ...”行的正上方并调用该行,它在 pry 控制台中工作,但一旦我退出 pry 控制台,它就会出错。
【问题讨论】:
标签: ruby-on-rails ruby