2012-07-08 5 views
3

У меня есть модель Упражнения, и у нее есть столбцы: circuit и: order (среди прочих). Во-первых, я пытаюсь заказать Упражнения сначала: circuit, а затем по: order. Когда я использую следующее:Метод заказа рельсов; column name: order

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

работает, как ожидалось. Однако, когда я пытаюсь добавить: столбец заказа:

@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 

Та же ошибка возникает также, когда я прохожу: колонки порядок в одиночку:

@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

Изменение названия столбца является единственным разумным вариантом. Измените его на «позицию».

+0

Спасибо - я думаю, я знаю, что я делаю этим вечером. Живи и учись. – Stuart

0

Если вы действительно хотите, чтобы попытаться сделать это, вы могли бы написать находку по SQL-запросу и избежать имени Col с обратными кавычками, как

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

Но я бы сказал вам, следует просто изменить название столбца

+1

Ваши одиночные кавычки находятся в неправильном месте, и вы должны использовать двойные кавычки для цитирования идентификаторов (таких как имена столбцов) в SQL, backticks - это MySQL-ism, к которому, к сожалению, поддерживает SQLite. –

+0

Все верно, т. Е. Более примерный пример того, как можно использовать обратные кавычки, а не производственный код. Непонятно ответить на изменение имени столбца. Но по крайней мере у меня есть еще одна причина не использовать SQLite. Не то чтобы мне нужен был –

0

Я также сталкиваюсь с той же проблемой, но указывая имя таблицы в порядке заказа, это работает.

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