【问题标题】:get the database object from it's hexadecimal object_id representation从它的十六进制 object_id 表示中获取数据库对象
【发布时间】:2016-09-16 06:13:19
【问题描述】:

我有一个错误:

NoMethodError: undefined method 'some_method?' for #<Customer:0x007f8a2c5d7d80>

Customer 是一个 db 支持的 AR 模型。 通过0x007f8a2c5d7d80判断,我有什么方法可以真正知道是哪个客户?

如何把它翻译成合理的东西?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    好的,this thread 回答了我的问题。

    无法确定这到底是哪个对象:

    显然,这在多次运行期间会有所不同,因为它仅 取决于系统决定分配内存的位置,而不是任何 对象本身的属性。

    有一个很棒的方法 - ObjectSpace#_id2ref - 它允许通过它的object_id实际找到对象:

    ObjectSpace._id2ref(object_id)
    

    【讨论】:

      【解决方案2】:

      我发现了一些东西:)

      a = SomethingClass.new
      a
      # => #<SomethingClass:0x005641a0a3bed8>
      
      0x005641a0a3bed8
      #=> 94839867948760
      
      a.object_id * 2
      #=> 94839867948760
      

      所以在十进制中这个“werid”代码只是加倍object_id

      【讨论】:

        猜你喜欢
        • 2014-02-18
        • 2014-12-20
        • 1970-01-01
        • 2015-08-01
        • 2020-02-12
        • 2018-11-03
        • 1970-01-01
        • 1970-01-01
        • 2016-02-06
        相关资源
        最近更新 更多