2015-06-25 20 views
5

Trong giao diện điều khiển:nhổ và id cho mảng của các yếu tố phi độc đáo

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

Đó là bình thường không?

nhận xét nhỏ - mô hình Khóa học sử dụng tổ tiên (đá quý).

UPD1:

tạo 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 Thông tin

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

'ids' ở đây là gì? –

+0

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

+0

Bạn có thể xem nhật ký của mình và xem sql được tạo bởi mỗi lệnh khác nhau hay không và thêm chúng dưới mỗi lệnh trong câu hỏi của bạn? –

Trả lời

1

Bạn sẽ có thể làm việc xung quanh này với

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

Vấn đề là LEFT OUTER JOIN với learn_course_translations, mà phải có nhiều hàng mỗi Learn::Course, kết quả là cùng learn_courses.id xuất hiện vài lần. pluck không quan tâm đến sự khác biệt, do đó, nó chỉ vượt qua tất cả trở lại.

+1

Tôi hiểu. Có vẻ như bạn đã đúng. Một điểm nữa: 'Tìm hiểu :: Course.pluck ('id khác biệt')' trả về 'PG :: AmbiguousColumn: ERROR: tham chiếu cột" id "là mơ hồ'. Nhưng nó không quan trọng, tôi nhận ra vấn đề là gì. Cảm ơn. –

+0

Rất tiếc, chi tiết tốt; được cập nhật cho người đọc trong tương lai. –

0

Có thể ancestry thêm default_scope vào kiểu máy của bạn. Cố gắng kiểm tra xem nó với

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

đúng, nhưng tôi không thể sử dụng 'không được lọc' –

Các vấn đề liên quan