Больше объектов в памяти с тем же идентификатором? - PullRequest
6 голосов
/ 10 января 2012

В моем приложении rails (v: 3.1), развернутом на heroku, я получаю больше объектов с таким же идентификатором в памяти. моя герока, консольный лог:

>> Project.find_all_by_id(92).size
=> 2
>> ActiveRecord::Base.connection.execute('select * from projects where id=92').to_a.size
=> 1

Как это возможно? В чем может быть проблема?

Ответы [ 2 ]

1 голос
/ 11 января 2012

Решение

В вашей базе данных, по вашему запросу SQL, нет повторяющихся записей.

Возможно размер или длина метод в вашем классе Project был переопределен.Я попытался 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.Для десятка строк вы не увидите разницу, но если у вас есть тысячи или миллионы ...

0 голосов
/ 13 февраля 2012
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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...