Rails 3 Query Interface - Расширенный порядок - PullRequest
0 голосов
/ 09 сентября 2011

Я столкнулся с проблемой при переносе всех наших находок Rails ActiveRecord в новый интерфейс запросов.Большинство из них простые, но этот более сложный.

Мы столкнулись с проблемой, когда нам хотелось перечислить определенное количество проектов из нашей базы данных, но вернуть результаты в определенном порядке, а не просто по убыванию, по возрастанию.,Старое решение для этого выглядит следующим образом.

ids = [2,19,1,11,22]
Project.find(:all, :conditions => {:id => ids}, :order => "FIELD(id,#{ids.join(',')})")

Там порядок, как и должно быть, попробуйте это с новым интерфейсом запроса, который он поднимает.

Project.where(:id => ids).order("FIELD(id,#{ids.join(',')})")

Mysql2::Error: 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,1018 DESC,1017) DESC LIMIT 1' at line 1: SELECT  `projects`.* FROM `projects` WHERE (`projects`.`id` IN (1018, 1017)) ORDER BY FIELD(id DESC,1018 DESC,1017) DESC LIMIT 1

Итак, «заказ» занимаетстрока и предполагает, что это всегда имя поля или список имен полей.

Кто-нибудь знает способ обойти это?Большое спасибо.

RobL

1 Ответ

0 голосов
/ 10 сентября 2011

Убедитесь, что у вас есть массив, состоящий исключительно из целых чисел (вставка SQL;), и тогда должно работать следующее:

join_ids = ids.join(',')
Project.find_by_sql ["SELECT * FROM projects WHERE id IN [?] ORDER BY FIELD(id,?);",join_ids,join_ids]

Вы поняли идею.Хотя не очень.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...