Pluck 和 ids 给出非唯一元素的数组
Pluck and ids give array of non unique elements
在控制台中:
Course.ids.count
=> 1766
Course.pluck(:id).count
=> 1766
Course.ids.uniq.count
=> 1529
Course.count
=> 1529
正常吗?
小评论-模型课程使用祖先(gem)。
UPD1:
生成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
嗯...
UPD2:
架构信息
#
# 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
也许 ancestry
将 default_scope
添加到您的模型中。尝试用
检查一下
Learn::Course.unscoped.ids.count
您应该可以使用
解决这个问题
Learn::Course.pluck('distinct learn_courses.id')
问题是 LEFT OUTER JOIN
和 learn_course_translations
,每个 Learn::Course
必须有多行,导致相同的 learn_courses.id
出现多次。 pluck
不关心区别,所以它只是将它们全部传递回去。
在控制台中:
Course.ids.count
=> 1766
Course.pluck(:id).count
=> 1766
Course.ids.uniq.count
=> 1529
Course.count
=> 1529
正常吗?
小评论-模型课程使用祖先(gem)。
UPD1:
生成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
嗯...
UPD2:
架构信息
#
# 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
也许 ancestry
将 default_scope
添加到您的模型中。尝试用
Learn::Course.unscoped.ids.count
您应该可以使用
解决这个问题Learn::Course.pluck('distinct learn_courses.id')
问题是 LEFT OUTER JOIN
和 learn_course_translations
,每个 Learn::Course
必须有多行,导致相同的 learn_courses.id
出现多次。 pluck
不关心区别,所以它只是将它们全部传递回去。