4

モデルExercisesがあり、:circuitと:orderの列があります(とりわけ)。ビューでは、最初に演習を: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クエリで検索を記述し、次のような後ろ引用符で列名をエスケープできます。

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

ただし、列名を変更するだけでよいと思います

于 2012-07-08T21:58:18.710 に答える
0

私も同じ問題に直面していますが、order句でテーブル名を指定すると機能します。

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

「order」の代わりに「reorder」を使用してください

于 2020-01-28T10:12:27.070 に答える