Rails find - упорядочить по наличию вложения Paperclip, затем создать запись datetime - PullRequest
3 голосов
/ 19 января 2010

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

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

Мне нужен бинарный статус типа «есть вложение» для первой части. Нужно ли мне создавать дополнительные атрибуты модели и использовать обратные вызовы paperclip для установки статуса двоичного столбца? Или есть лучший способ?

Я бы предпочел сделать эту сортировку на уровне БД, поскольку мы будем использовать will_paginate для циклического перемещения по блокам записей.

заранее спасибо

Ответы [ 2 ]

3 голосов
/ 19 января 2010

Вам не нужно создавать дополнительное поле, вместо этого преобразуйте имя файла в булево на лету с помощью CONV (я предполагаю, что вы запускаете это на MySQL - но эквивалентные функции доступны на других RDBMS).

ORDER BY CONV(photo_file_name,2,2) DESC, created_at

Технически, CONV - это функция для преобразования чисел между различными базами, но она допускает ввод строки. Он вернет 0, если значение присутствует в столбце photo_file_name, и NULL, если введен NULL.

Ссылка MySQL CONV

2 голосов
/ 20 января 2010

Поскольку мы подаем в суд на SQLite в dev и postgres (и можем вскоре переключить производство), CONV () не был доступен.

Мы провели сравнение в предложении ORDER BY, чтобы создать двоичный файлнеобходимое значение.

ORDER BY (photo_file_name IS NULL) ASC, created_at DESC 

Это поддерживается всеми нашими БД и достигает намеченной цели.

...