Frage

In meiner Rails -App (v: 3.1) erhalte ich mehr Objekte derselben ID im Speicher. Mein Heroku -Konsolenprotokoll:

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

Wie ist das möglich? Was könnte das Problem sein?

War es hilfreich?

Lösung

Lösung

Es gibt anscheinend keinen doppelten Eintrag in Ihrer Datenbank gemäß Ihrer SQL -Abfrage.

Vielleicht Größe oder Länge Die Methode in Ihrem Klassenprojekt wurde überschrieben. Ich habe versucht find_all_by_id Und die SQL -Abfrage scheint korrekt zu sein.

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 

Hinweis

Wenn Sie Datensätze zählen möchten, sollten Sie dies auf diese Weise tun

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

Weil, wie Sie sehen können, Die Anzahl wird von Ihrer Datenbank durchgeführt und nicht von Ruby selbst. Für ein Dutzend Zeilen werden Sie den Unterschied nicht sehen, aber wenn Sie Tausende oder Millionen haben ...

Andere Tipps

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

Sie sollten zuerst ein besseres Suchdokument über MySQL :: Ergebnis finden

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top