内存中具有相同ID的更多对象?

时间:2012-01-10 10:22:10

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1 heroku

在myoku上部署的我的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

这怎么可能?可能是什么问题?

2 个答案:

答案 0 :(得分:1)

<强>解决方案

根据您的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本身执行。对于十几行你不会看到差异,但如果你有数千或数百万......

答案 1 :(得分:0)

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 :: Result的文件

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