15213


Modelからデータを引っ張ってきたとき,ブラウザで確認すると  
Article:0x9fhu3u...と表示されます。  
これは、データベースからデータがオブジェクトの16進数で帰ってきているという解釈で良いでしょうか。なぜこのような形になるのですか？


CC BY-SA 3.0
2015-09-03T12:13:27.610
15202
2015-09-03T23:26:19.413
11188
question
ruby-on-rails
Article Modelからデータを引っ張ってきたときの#<Article:0x9fhu3u...>


`<%= blog %>` のように書くと、`<%= blog.to_s %>`を書いたことと同じになります。

16進数の部分はデータベースのデータというより、モデルのインスタンスのobject_idをベースにした値が表示されています。  
下のコードのように object_id を左に1ビットシフトし（2倍しても同じです）、その値を16進数表示すると、 to_s
と同じ値が得られます。（厳密には to_s には "0x00" が付いていますが）

[code]

    >> blog.to_s 
    "#<Blog:0x007f83fa09a328>"
    >> blog.object_id 
    70102406189460
    >> (blog.object_id << 1).to_s(16)
    "7f83fa09a328"
    
[/code]

ちなみに to_sの結果がこのようになるのは、Railsの仕様ではなく、Ruby標準の挙動です。

参考：

  * [Class: Object (Ruby 2.2.3)](http://ruby-doc.org/core-2.2.3/Object.html#method-i-to_s)
  * [In Ruby, why does inspect() print out some kind of object id which is different from what object_id() gives? - Stack Overflow](https://stackoverflow.com/questions/2818602/in-ruby-why-does-inspect-print-out-some-kind-of-object-id-which-is-different)


CC BY-SA 3.0
2015-09-03T23:26:19.413
15213
2015-09-03T23:26:19.413
2017-05-23T12:38:55.307
-1
85
15202
answer