我有一个模型练习,它有以下列:circuit和:order(以及其他)。在一个视图中,我试图首先通过:circuit然后通过:order来命令练习。当我使用以下内容时:
@schedule.exercises.order(:circuit).each do |exercise|
它按预期工作。但是,当我尝试添加:order column:
时@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
)相同。我想知道除了改变我的列标题之外还有什么方法吗?
谢谢, 斯图尔特
答案 0 :(得分:7)
更改列名是唯一合理的选择。将其更改为" position"。
答案 1 :(得分:0)
如果你真的想尝试这样做,你可以通过sql查询编写一个find,并使用后引号转义col名称,如
ModelName.find_by_sql(SELECT * FROM ModelName ORDER BY '`order`')
但我会说你应该只改变列名
答案 2 :(得分:0)
我也面临同样的问题,但在订单子句中指定表名是有效的。
@schedule.exercises.order("exercises.circuit ASC, exercises.order ASC").each do |exercise|
答案 3 :(得分:0)
只需使用“重新排序”而不是“订单”