2015-06-25 7 views
5

In Konsole geben:Zupfen und ids Array von nicht eindeutigen Elementen

Course.ids.count 
=> 1766 
Course.pluck(:id).count 
=> 1766 
Course.ids.uniq.count 
=> 1529 
Course.count 
=> 1529 

Es ist normal?

kleiner Kommentar - Modell Kurs verwendet Abstammung (Edelstein).

UPD1:

generierten SQL:

Learn::Course.ids.count 
(5.4ms) SELECT "learn_courses"."id" FROM "learn_courses" LEFT OUTER JOIN "learn_course_translations" ON "learn_course_translations"."learn_course_id" = "learn_courses"."id" 
=> 1766 
Learn::Course.count 
(1.5ms) SELECT COUNT(*) FROM "learn_courses" 
=> 1529 

hmm ...

UPD2:

Schema Information

# 
# Table name: learn_courses 
# 
# id   :integer   not null, primary key 
# name  :string(255) 
# position :integer 
# created_at :datetime 
# updated_at :datetime 
# ancestry :string(255) 
# course_type :string(255) 
# article  :string(255) 
# item_style :integer 
# hidden  :boolean 
# score  :integer   default(0) 
# next_id  :integer 
# first  :boolean 
+2

was ist 'ids' hier? –

+0

@MaxWilliams http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-ids –

+0

Können Sie in Ihrem Protokoll nachsehen, welche SQL von den verschiedenen Befehlen generiert wird, und fügen Sie sie unter hinzu jeder Befehl in deiner Frage? –

Antwort

1

sollten Sie in der Lage sein, dies umgehen mit

Learn::Course.pluck('distinct learn_courses.id') 

Das Problem ist, dass LEFT OUTER JOIN mit learn_course_translations, die mehrere Zeilen pro Learn::Course haben müssen, was in der gleichen learn_courses.id erscheinen mehrmals. pluck kümmert sich nicht um die Unterscheidbarkeit, also gibt es sie einfach alle zurück.

+1

ich sehe. Sieht aus, als hättest du recht. Ein weiterer Punkt: 'Learn :: Course.pluck ('distinct id')' gibt 'PG :: AmbiguousColumn: FEHLER zurück: Spaltenreferenz" id "ist mehrdeutig'. Aber es ist egal, ich habe erkannt, was das Problem ist. Vielen Dank. –

+0

Hoppla, gutes Detail; aktualisiert für zukünftige Leser. –

0

Vielleicht ancestry fügt zu Ihrem Modell hinzu. Versuchen Sie es zu überprüfen, mit

Learn::Course.unscoped.ids.count 
+0

das ist richtig, aber ich kann nicht 'scoped' –

Verwandte Themen