【问题标题】:Convert ActiveSupport::TimeWithZone class into String "ActiveSupport::TimeWithZone"将 ActiveSupport::TimeWithZone 类转换为字符串“ActiveSupport::TimeWithZone”
【发布时间】: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


    【解决方案1】:

    没关系,我发现了我的问题。错误发生在return DateTime.parse(get_attri(object)) 行中,因为我正在尝试将 ActiveSupport::TimeWithZone 对象解析为 DateTime。

    【讨论】:

      猜你喜欢
      • 2011-05-28
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      • 2011-11-22
      相关资源
      最近更新 更多