質問

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 ::結果については、最初に結果を検索する方が良いでしょう

http://rubydoc.info/gems/mysql/2.8.1/frames

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top