Domanda

Nella mia applicazione Rails (v: 3.1) distribuito su Heroku io sono sempre più oggetti dello stesso id in memoria. il mio log della console Heroku:

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

Come è possibile? Quale potrebbe essere il problema?

È stato utile?

Soluzione

Soluzione

Non v'è entrata a quanto pare non duplicata nel database in base alla query SQL.

Forse dimensione o lunghezza metodo nella classe del progetto è stato ignorato. Ho cercato find_all_by_id e la query SQL sembra essere corretta.

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 

Suggerimento

Se si desidera contare record si dovrebbe fare in questo modo

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

Perché, come si può vedere, il conteggio viene eseguito dal database e non da Ruby stessa. Per una decina di righe non si vedrà la differenza, ma se si dispone di migliaia o milioni ...

Altri suggerimenti

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

faresti meglio documento di ricerca su MySQL :: Risultato prima

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top