エラーとかではなく単純に自分の知識不足なのですが。。。
同じレシーバを参照しているはずなのに、object_idが変わってしまいます。
[37] pry(main)> User.first.object_id User Load (0.4ms) SELECT `users`.* FROM `users` WHERE `users`.`deleted_at` IS NULL ORDER BY `users`.`id` ASC LIMIT 1 => 70289450753400 [38] pry(main)> User.first.object_id User Load (0.4ms) SELECT `users`.* FROM `users` WHERE `users`.`deleted_at` IS NULL ORDER BY `users`.`id` ASC LIMIT 1 => 70289357969400 [39] pry(main)> User.first.object_id User Load (0.4ms) SELECT `users`.* FROM `users` WHERE `users`.`deleted_at` IS NULL ORDER BY `users`.`id` ASC LIMIT 1 => 70289450633560 [40] pry(main)> User.first.object_id User Load (0.5ms) SELECT `users`.* FROM `users` WHERE `users`.`deleted_at` IS NULL ORDER BY `users`.`id` ASC LIMIT 1 => 70289433034860 [41] pry(main)> User.first.object_id User Load (2.0ms) SELECT `users`.* FROM `users` WHERE `users`.`deleted_at` IS NULL ORDER BY `users`.`id` ASC LIMIT 1 => 70289433096940 [42] pry(main)> User.first.object_id User Load (0.5ms) SELECT `users`.* FROM `users` WHERE `users`.`deleted_at` IS NULL ORDER BY `users`.`id` ASC LIMIT 1 => 70289450451080 [43] pry(main)> User.first.object_id User Load (0.6ms) SELECT `users`.* FROM `users` WHERE `users`.`deleted_at` IS NULL ORDER BY `users`.`id` ASC LIMIT 1 => 70289433159180
User.firstは全て同じレシーバだと思うのですが、毎回変わってしまいます。しかし、
[28] pry(main)> u = User.first [29] pry(main)> u.object_id => 70289238676820 [30] pry(main)> u.object_id => 70289238676820 [31] pry(main)> u.object_id => 70289238676820 [32] pry(main)> u.object_id => 70289238676820 [33] pry(main)> u.object_id => 70289238676820 [34] pry(main)> u.object_id => 70289238676820 [35] pry(main)> u.object_id => 70289238676820 [36] pry(main)> u.object_id => 70289238676820
変数に代入すると全て同じになります。
これはどういうことなのでしょうか。
・なぜUser.firstを参照すると全て変わるのか
・なぜ変数に代入すると変わらないのか
・この辺り一帯の知識の付け方が知りたい(プログラミングでいうとどのあたりの知識に関連しているのか)
何卒よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/30 04:21