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

n00*_*00b 6 ruby ruby-on-rails heroku ruby-on-rails-3 ruby-on-rails-3.1

在我的rails应用程序(v:3.1)上部署在heroku上我在内存中获得了更多具有相同id的对象.我的heroku控制台日志:

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

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

bas*_*gys 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 
Run Code Online (Sandbox Code Playgroud)

暗示

如果你想计算记录,你应该这样做

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

因为,正如您所看到的,计数是由您的数据库执行的,而不是由 ruby​​ 本身执行的。对于十几行,你不会看到差异,但如果你有数千或数百万......