【问题标题】:Rails Active Record Order IssueRails Active Record 订单问题
【发布时间】:2012-11-26 14:16:14
【问题描述】:

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

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

我使用 MySQL 作为数据库。但是返回的结果没有排序

我已经查看了控制台,并将生成的 sql 归档,看起来还可以

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

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

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

【问题讨论】:

    标签: mysql ruby-on-rails activerecord


    【解决方案1】:

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

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

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

    【讨论】:

    • 我什至不确定您是否真的需要引号/反引号环绕“何时”,只需 Event.order('when DESC') 就可以了。至少,它对我有用
    • @KuyaJohn 这不是可选的,不是可选的,如果没有反引号,我会遇到 sql 语法错误。
    • @MrYoshiji 反引号,我认为,因为WHEN 出现在MySQL Reserved Word 的列表中
    【解决方案2】:

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

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

    这对于 column_names 通常是正确的,除非您的情况是 when 是保留字。所以你需要反引号:

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

    不过,我还是建议您更改您的列名,您最终会遇到使用保留字的复杂情况。 when 在我看来也不是很具有描述性,是不是:创建/订购事件的时间?活动什么时候开始?活动什么时候结束?也许occurring_atdate_occurring 列名会更详细。

    【讨论】:

    • WHEN 出现在MySQL Reserved Word 列表中
    • 啊!很高兴知道。在这种情况下@Jun1st 最好重命名您的列。我会相应地编辑我的答案^^
    • @joofsh 实际上,无意更改它。 “何时”对模型有意义:)
    • @Jun1st 好的代码考虑了可读性。它是你的代码,所以我相信你知道什么对模型有意义。 “什么时候”可能对您有意义,因为您编写了它,但是对于第一次看到代码的其他开发人员来说,它的含义是否显而易见?但只是我的 2 美分 :)
    • @joofsh “何时”对您意味着什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多