2013-08-05 22 views
0

我在Rails應用程序上使用postgresql來記錄特定事件發生的時間。發生事件時的數據庫列名爲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

好的,謝謝你的指針 – Leahcim

回答

3
  • 當在SQL中的保留字(想想開關情況:CASE <smth> WHEN ...

  • 可以嘗試訪問它像這樣:

    Event.order('events.when DESC') 
    
  • 你應該改變你的列名到不同於when(看看@PhilipHallstrom評論)

+2

我建議「occurrence_at」或「starts_at」(或者它們的_on等同於它們是日期,而不是日期時間),因爲它們更適合Rails時間戳。 –

+1

解決這個問題的通常方法是雙重引用違規標識符('.order('「when desc')'),但第三點是真正的解決方案。 –

+0

@ muistooshort我一直在想爲什麼你最近沒有回答我的任何問題 – Leahcim