2013-08-05 2 views
0

Я использую postgresql для базы данных в приложении Rails, которое отслеживает, когда происходят определенные события. Столбец базы данных для случая, когда происходит событие, называется when (плохое имя, я знаю). Я могу это сделатьошибка синтаксиса при заказе по дате

@events = @group.events.order('created_at DESC') 

Однако, когда я делаю это

@events = @group.events.order('when DESC') 

Я получаю эту ошибку

PG::SyntaxError: ERROR: syntax error at or near "when" 
LINE 1: ..."events" WHERE "events"."group_id" = $1 ORDER BY when DESC 
                  ^
: SELECT "events".* FROM "events" WHERE "events"."group_id" = $1 ORDER BY when DESC 

when запись имеет этот формат в базе данных

when: "2013-08-07" 

Основано на что я вам сказал, вы можете увидеть причину, почему я не могу сделать это

@events = @group.events.order('when DESC') 

Это важно для меня, чтобы иметь возможность заказать события по когда они проводятся. Поскольку порядок работы created_at работает, я не понимаю, почему возникает синтаксическая ошибка, когда я заменяю другой столбец.

+1

WHEN - зарезервированное слово в SQL (предложение CASE WHEN), попробуйте использовать '.order ('events.when DESC')' (но я рекомендую вам изменить имя этого столбца) (может быть, 'start_time' вместо' when'?) – MrYoshiji

+0

ok, спасибо за указатель – Leahcim

ответ

3
  • , когда зарезервированное слово в SQL (думаю о случаях коммутатора: CASE <smth> WHEN ...)

  • Вы можете попробовать к нему доступ, как это:

    Event.order('events.when DESC') 
    
  • Вы должны изменить имя столбца на что-то иное, чем when (Взгляните на комментарий @PhilipHallstrom)

+2

Я бы предложил «incoming_at» или «start_at» (или их эквиваленты _on, если они являются датами, а не датами), поскольку они лучше подходят для временных меток Rails. –

+1

Обычный способ решения этой проблемы состоит в том, чтобы дважды указать оскорбительный идентификатор ('.order ('" when "desc')'), но ваша третье значение является реальным решением. –

+0

@muistooshort Мне было интересно, почему вы не ответили ни на один из моих вопросов недавно – Leahcim

Смежные вопросы