ruby-on-rails - 尝试通过关系显示所有项目时出现 Postgres 错误

标签 ruby-on-rails ruby rails-postgresql pg

这适用于 SQLite3,但不适用于 PostgreSQL。

我得到的错误是 PG::InvalidColumnReference: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list

我正在尝试显示 group 中的所有 exercises,代码为:current_user.group.exercises

这是关系

一组有_很多锻炼,一个锻炼有_很多锻炼

在我的组模型中,我有 has_many :exercises, through: :workouts

有什么想法吗?

编辑 1:

这是 Rails 正在生成的 SQL:

SELECT DISTINCT "exercises".* 
FROM "exercises" 
  INNER JOIN "workout_exercises" ON "exercises"."id" = "workout_exercises"."exercise_id" 
  INNER JOIN "workouts" ON "workout_exercises"."workout_id" = "workouts"."id" 
  INNER JOIN "groups_workouts" ON "workouts"."id" = "groups_workouts"."workout_id" 
WHERE "groups_workouts"."group_id" = 2 
ORDER BY exercise_order, workout_order

这里是错误:

PG::InvalidColumnReference: ERROR:  for SELECT DISTINCT, ORDER BY expressions must appear in select list
LINE 1: ..." WHERE "groups_workouts"."group_id" = 2 ORDER BY exercise_o...
                                                             ^
: SELECT DISTINCT "exercises".* FROM "exercises" INNER JOIN "workout_exercises" ON "exercises"."id" = "workout_exercises"."exercise_id" INNER JOIN "workouts" ON "workout_exercises"."workout_id" = "workouts"."id" INNER JOIN "groups_workouts" ON "workouts"."id" = "groups_workouts"."workout_id" WHERE "groups_workouts"."group_id" = 2 ORDER BY exercise_order, workout_order

最佳答案

所以这是一个uniq约束异常。在模型上我有 has_many :exercises, through: :workouts, uniq: true Postgres 不喜欢。

为了修复错误,我将 uniq 约束从模型移到了实际查询中。所以在这种情况下,我只是做了 current_user.group.exercises.uniq

这只能解决我的问题。在某些情况下,我希望在模型级别有​​一个 uniq 约束,但我还没有找到一种方法来做到这一点。

关于ruby-on-rails - 尝试通过关系显示所有项目时出现 Postgres 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20060862/

相关文章:

ruby-on-rails - 在 Ruby on Rails 中使用迁移

postgresql - 在 Rails 4 中查询 PostgreSQL 多维数组数据类型

ruby-on-rails - 如何使用 Ruby 快速计算字符串中子字符串的出现次数

ruby-on-rails - 为 STI 模型创建表单

ruby-on-rails - 在 Rails 模型中创建 "one"到 "one or two"关系的最佳方法是什么?

ruby-on-rails - Ruby JSON.pretty_generate ... 很不漂亮

ruby-on-rails - 在 Cucumber 场景中使用 click_link

ruby-on-rails - 尝试在 Heroku 上部署 Multi-Tenancy Rails 应用程序时 Apartment::SchemaNotFound

ruby-on-rails - 新分配的序列不起作用

ruby - PostgreSQL 查询正在吞噬 VM