Pluck和id给出了一系列非唯一元素

时间:2015-06-25 14:47:50

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord ancestry

在控制台中:

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

这很正常吗?

小评论 - 模型课程使用祖先(宝石)。

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

2 个答案:

答案 0 :(得分:1)

您应该可以使用

解决此问题
Learn::Course.pluck('distinct learn_courses.id')

问题在于LEFT OUTER JOIN learn_course_translations,每Learn::Course行必须有多行,导致同一learn_courses.id出现多次。 pluck并不关心清晰度,因此它只是将它们全部传回。

答案 1 :(得分:0)

也许ancestry会为您的模型添加default_scope。尝试使用

进行检查
Learn::Course.unscoped.ids.count