【发布时间】:2015-10-14 13:19:26
【问题描述】:
我在尝试按关联计数订购模型时遇到了一些问题。我正在使用的方法被描述为here,它可以在控制台中工作,每当我使用 byebug 暂停它时。其他时候它根本不执行 select 语句,只是尝试进行分组和排序。这是我的课:
class Course < ActiveRecord::Base
has_many :course_videos, foreign_key: :course_id
has_many :videos, through: :course_videos
scope :ordered_by_video_count, -> {
joins(:videos)
.select("courses.*, count(videos.id) as video_count")
.group("courses.id")
.order("video_count desc")
}
end
我得到的确切错误是:
SQLite3::SQLException: no such column: video_count: SELECT COUNT(*) AS count_all, courses.id AS courses_id FROM "courses" INNER JOIN "course_videos" ON "course_videos"."course_id" = "courses"."id" INNER JOIN "videos" ON "videos"."id" = "course_videos"."video_id" GROUP BY courses.id ORDER BY video_count desc
谢谢!
斯蒂芬
【问题讨论】:
-
由于某种原因它不尊重
as,您可以在sql错误SELECT COUNT(*) AS count_all中看到这一点。您可以将顺序更改为count_all而不是video_count。如果不是,您将需要弄清楚为什么 as 不被尊重。也许尝试用引号括起来?我不使用 sqlite,但一个快速的谷歌显示教程有它们,我不确定 sqlite 是否需要它们,所以可能什么都不做。.select("courses.*, count(videos.id) as 'video_count'") -
@japed count_all 排序和引号都没有做任何事情。 SQLite 仅适用于开发环境,但 postgres 似乎也跳过了它。
标签: sql ruby-on-rails activerecord associations