2012-07-08 54 views
3

我有一個模型練習,它有列:電路和:訂單(等)。在一個視圖中,我試圖通過以下命令首先命令練習:電路然後按順序。當我使用以下內容:Rails命令方法;列名爲:訂單

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

它按預期工作。然而,當我嘗試添加:順序列:

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

我收到以下錯誤:單獨順序列:

@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 

SQLite3::SQLException: near "order": syntax error: SELECT "exercises".* FROM "exercises" WHERE "exercises"."schedule_id" = 1 ORDER BY circuit, order 

同樣的錯誤還當我經過時

我假設這是因爲列名稱(:順序)與SQL方法名稱(order)相同。我想知道是否有任何解決方案,除了改變我的列標題?

感謝, 斯圖爾特

+0

可能只是更容易地更改列的名稱而不是使用保留關鍵字進行排序。 – 2012-07-08 21:54:58

回答

7

更改列名是唯一明智的選擇。將其改爲「位置」之類的東西。

+0

謝謝 - 我想我知道我今天晚上在做什麼。活到老,學到老。 – Stuart 2012-07-08 22:28:37

0

如果你真的想嘗試做到這一點,你可以寫的SQL查詢查找和逃避與反引號山坳名稱,如

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

,但是我要說你應該只更改列名稱

+1

您的單引號位置錯誤,您應該使用雙引號引用SQL中的標識符(例如列名稱),反引號是SQLite不幸支持的MySQL-ism。 – 2012-07-08 22:04:33

+0

所有真實的,更多關於如何使用backquotes而不是生產代碼的粗略例子。公然的答案是改變列名。但至少我有另外一個理由不使用SQLite。不是我需要一個 – 2012-07-08 22:27:01

0

我也面臨同樣的問題,但指定它的工作順序條款表名。

@schedule.exercises.order("exercises.circuit ASC, exercises.order ASC").each do |exercise| 
相關問題