Question

In my rails app (v: 3.1) deployed on heroku I am getting more objects of same id in memory. my heroku console log:

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

How is this possible? What could be the problem?

Was it helpful?

Solution

Solution

There is apparently no duplicate entry in your database according to your SQL query.

Maybe size or length method in your class Project has been overridden. I have tried find_all_by_id and the SQL query seems to be correct.

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 

Hint

If you want to count records you should do it this way

Script.where(id: 1).size
  (0.8ms)  SELECT COUNT(*) FROM "scripts" WHERE "scripts"."id" = 1
 => 1 

Because, as you can see, the count is performed by your database and not by ruby itself. For a dozen of rows you won't see the difference, but if you have thousands or millions...

OTHER TIPS

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

you'd better lookup document about Mysql::Result first

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top