Как заказать поиск результатов по значению в любом из 2 столбцов? (от которых зависит) (Rails) - PullRequest
1 голос
/ 17 июня 2009

Всего вопросов о нубах. Буду очень признателен за любые указатели.

У меня есть модель рельсов, которая включает в себя 2 возможных значения для концепции, например, расстояние (значение из файла GPS и отредактированное значение). Можно указывать значение либо в столбце (просто в файле или просто вручную), либо в обоих (в данном случае файл перезаписывается вручную), либо ни в одном из них:

distance-file     distance-edited
9
10                11
                  12

В некоторых местах моего приложения я хочу найти и отсортировать результаты по расстоянию, при этом файл и редактируемые имеют значение только в том смысле, что я хочу использовать отредактированное расстояние при его наличии.

Поскольку я делаю такую ​​сортировку во многих местах, в идеале я хотел бы централизовать логику для выбора значения расстояния, которое нужно где-то использовать, чтобы в каждой находке я мог просто сортировать по расстоянию.

Какой правильный способ сделать это?

Спасибо!

Olivia

Ответы [ 2 ]

1 голос
/ 17 июня 2009

Итак, просто для повторения, вы хотите использовать отредактированное расстояние в качестве основного показателя, когда он присутствует, и файл расстояния, если его нет? Вам понадобится что-то вроде:

ORDER BY COALESCE(distance-edited, distance-file)

Coalesce означает «использовать первое значение в этом списке, которое не равно NULL» и является функцией, специфичной для MS SQL. Для других баз данных вам необходимо использовать эквивалентный оператор, поддерживаемый этой системой.

Что если оба имеют значение NULL? Вы хотите это в конце списка или в начале? Вы можете использовать значение «по умолчанию», добавив третье значение в список объединения:

ORDER BY COALESCE(distance-edited, distance-file, 100)
0 голосов
/ 17 июня 2009

Я думаю, что вы должны быть в состоянии просто передать :order => 'distance-edited, distance-file' как условие вашему find.

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