2015-06-25 6 views
5

W konsoli:Pluck i identyfikatory dać tablicę non unikalnych elementów

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

To normalne?

mały komentarz - model Kurs używa rodowodu (klejnot).

UPD1:

Generated 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 Informacja

# 
# 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

co to jest "ids" tutaj? –

+0

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

+0

Możesz zajrzeć do swojego logu i zobaczyć, jaki sql jest generowany przez każde z różnych poleceń, i dodać je każde polecenie w twoim pytaniu? –

Odpowiedz

1

powinien być w stanie obejść ten z

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

Problem polega na tym, że LEFT OUTER JOIN z learn_course_translations, który musi mieć wiele wierszy za Learn::Course, powodując tym samym learn_courses.id pojawiające kilka razy. pluck nie dba o odrębność, więc po prostu przekazuje je wszystkim z powrotem.

+1

Rozumiem. Wygląda na to, że masz rację. Jeszcze jeden punkt: 'Learn :: Course.pluck ('distinct id')' zwraca 'PG :: AmbiguousColumn: ERROR: odwołanie do kolumny" id "jest niejednoznaczne'. Ale to nie ma znaczenia, zdałem sobie sprawę z tego, czym jest problem. Dzięki. –

+0

Ups, dobry szczegół; zaktualizowany dla przyszłych czytelników. –

0

Może ancestry dodaje default_scope do swojego modelu. Spróbuj sprawdzić go z

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

to prawda, ale nie mogę użyć "unscoped" –