4

我有一个模型练习,它有 :circuit 和 :order 列(等等)。在一个视图中,我试图先通过:电路订购练习,然后通过:订购。当我使用以下内容时:

@schedule.exercises.order(:circuit).each do |exercise|

它按预期工作。但是,当我尝试添加 :order 列时:

@schedule.exercises.order(:circuit, :order).each do |exercise|

我收到以下错误:

SQLite3::SQLException: near "order": syntax error: SELECT "exercises".* FROM "exercises"  WHERE "exercises"."schedule_id" = 1 ORDER BY circuit, order

当我单独传递 :order 列时也会发生同样的错误:

@schedule.exercises.order(:order).each do |exercise|

SQLite3::SQLException: near "order": syntax error: SELECT "exercises".* FROM "exercises"  WHERE "exercises"."schedule_id" = 1 ORDER BY order

我假设这是因为列名 (:order) 与 SQL 方法名 ( order) 相同。我想知道除了更改我的列标题之外是否有任何解决方法?

谢谢,斯图尔特

4

4 回答 4

8

更改列名是唯一明智的选择。将其更改为“位置”之类的内容。

于 2012-07-08T22:06:50.940 回答
0

如果您真的想尝试这样做,您可以通过 sql 查询编写查找并使用反引号转义 col 名称,例如

ModelName.find_by_sql(SELECT * FROM ModelName ORDER BY '`order`')

但我会说你应该只更改列名

于 2012-07-08T21:58:18.710 回答
0

只需使用“重新排序”而不是“订购”

于 2020-01-28T10:12:27.070 回答
0

我也面临同样的问题,但是在 order 子句中指定表名它可以工作。

@schedule.exercises.order("exercises.circuit ASC, exercises.order ASC").each do |exercise|
于 2016-09-21T19:39:15.890 回答