Rails顺序方法;列命名:order

时间:2012-07-08 21:45:38

标签: sql ruby-on-rails

我有一个模型练习,它有以下列: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)相同。我想知道除了改变我的列标题之外还有什么方法吗?

谢谢, 斯图尔特

4 个答案:

答案 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)

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