同じIDを持つメモリ内のより多くのオブジェクト?
-
25-10-2019 - |
質問
Herokuに展開されたMy Railsアプリ(V:3.1)では、同じIDのオブジェクトがメモリでより多くのオブジェクトを取得しています。私のHerokuコンソールログ:
>> Project.find_all_by_id(92).size
=> 2
>> ActiveRecord::Base.connection.execute('select * from projects where id=92').to_a.size
=> 1
これはどのように可能ですか?何が問題なのでしょうか?
解決
解決
SQLクエリに従って、データベースに重複するエントリは明らかにありません。
多分 サイズ また 長さ クラスプロジェクトの方法はオーバーライドされています。私が試してみました Find_all_by_id そして、SQLクエリは正しいようです。
1.9.2-p180 :006 > Script.find_all_by_id(1).size
Script Load (0.7ms) SELECT "scripts".* FROM "scripts" WHERE "scripts"."id" = 1
=> 1
ヒント
レコードを数えたい場合は、このようにする必要があります
Script.where(id: 1).size
(0.8ms) SELECT COUNT(*) FROM "scripts" WHERE "scripts"."id" = 1
=> 1
あなたが見ることができるように、 カウントはデータベースによって実行されます そして、Ruby自体ではありません。数十の行の場合、違いはわかりませんが、数千または数百万の場合は...
他のヒント
irb(main):023:0> ActiveRecord::Base.connection.execute('select count(*) from users where address_id = 22').fetch_hash
=> {"count(*)"=>"4"}
irb(main):024:0> User.find_all_by_address_id(22).size
=> 4
MySQL ::結果については、最初に結果を検索する方が良いでしょう
所属していません StackOverflow