Rails Activerecord订单问题

时间:2012-11-26 14:16:15

标签: mysql ruby-on-rails activerecord

我有一个名为Event的模型类,以及一个名为'when'的字段。我正在尝试按desc返回事件顺序,所以这是代码。

@events = Event.order("'when' DESC") 

我正在使用MySQL作为数据库。但返回的结果未排序

我查看了控制台,并提交了生成的sql文件,这似乎没问题

SELECT `events`.* FROM `events` ORDER BY 'when' DESC

我也在控制台中运行这个sql,它返回了排序结果。 “什么时候”有什么特别之处吗?

如果我将查询更改为Event.order("events.when DESC"),则会返回排序结果

2 个答案:

答案 0 :(得分:3)

它应该是反引号,而不是单引号。

@events = Event.order("`when` DESC") 

当您在single quote周围使用when时,它不再是列,而只是一个字符串值。当转义 tableName和columnName时,你应该使用反引号而不是单行。

答案 1 :(得分:1)

您可以删除要添加到字段中的单引号。它应该与整个事物的引用一起使用,例如:

@events = Event.order("column_name DESC") 

对于column_names,这是正确的,除了when是保留字的情况。所以你需要反击它:

 @events = Event.order("`when` DESC")

但是,我仍然建议您更改列名,最终会使用保留字来解决问题。 when在我看来也不是很具描述性,是吗:当事件被创建/订购时?活动何时开始?什么时候会结束?也许occurring_atdate_occurring列名称会更加详细。