。
第一個錯誤是th在你的字符串插值沒有得到應用,因爲你使用了一個單引號字符串。您需要使用雙引號字符串才能使字符串插值正確工作。
試試這個,而是:
Battle.all.order("votes_count/#{(DateTime.now.to_i - created_at.to_i)/86400}")
這將使插值正常工作,但會導致你遇到的第二個錯誤,在處理插值發生。
第二錯誤是由試圖使用的created_at
值中內插,在運行SQL之前發生而引起的。取而代之的是,重構該查詢使用這種形式:
Battle.all.order("votes_count/('#{DateTime.now}' - created_at)/86400")
在該代碼中,僅DateTime.now
值被包括在插值中,括號已被移動的內插值外,和#{DateTime.now}
結果包圍單引號使結果值對SQL友好。 to_i
已從兩個表達式中刪除,以允許在SQL中完成日期減法。
注意,應謹慎使用SQL日期時間減法被使用,如日期時間減法的語法不同於一個數據庫產品廣泛到另一個一樣,減法運算的結果。在一些常見的數據庫中減去日期時間值的
例子:
| Database | Syntax | Result Units |
|-----------|-------------------------------------------------------|--------------|
| Postgres | datetime1 - datetime2 | Interval |
| MySQL | TIMEDIFF(datetime1, datetime1) | Seconds |
| SQLServer | DATEDIFF(second, datetime1, datetime2) | Seconds |
| DB2 | SECOND(datetime1,s) - SECOND(datetime2,s) | Seconds |
| SQLite | strftime('%s', datetime1) - strftime('%s', datetime2) | Seconds |
請正確嵌套您的引號{},()。 – Meier
謝謝,更新我的代碼 – gal