【发布时间】:2014-07-18 00:14:08
【问题描述】:
当我调用以下命令时:
organization = Organization.first
organization.members.order("SUBSTRING_INDEX(SUBSTRING_INDEX(members.name, ' ', 3), ' ', -1)").last
给我以下错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
'DESC, ' ' DESC, 3) DESC, ' ' DESC, -1) DESC LIMIT 1' at line 1:
SELECT `members`.* FROM `members` WHERE `members`.`organization_id` = 2
ORDER BY SUBSTRING_INDEX(SUBSTRING_INDEX(members.name DESC, ' ' DESC, 3) DESC, ' ' DESC, -1) DESC LIMIT 1
问题出在此声明中:
SUBSTRING_INDEX(SUBSTRING_INDEX(members.name DESC, ' ' DESC, 3) DESC, ' ' DESC, -1) DESC LIMIT 1
它在ORDER BY 语句中随机添加“DESC”。这是 AR 问题还是我做错了什么?
注意:这只发生在我致电last 时。我正在使用 ActiveRecord 4.1.1。
【问题讨论】:
-
它不会随机添加DESC。每次添加 .last 时都会这样做,对吗?
-
我将其称为“随机”,因为它的行为与预期不符。
-
我会称之为“出乎意料”。
-
它的行为不应该如此。当我调用
.last时,它应该使用以下SQL:SUBSTRING_INDEX(SUBSTRING_INDEX(members.name, ' ', 3), ' ', -1) DESC。除非这就是 AR 的设计方式(这是一个糟糕的设计)。
标签: ruby-on-rails ruby activerecord rails-activerecord