Сортировка «Найти» с использованием методов, а не полей в базе данных - PullRequest
0 голосов
/ 14 июля 2010

У меня есть модель заявки, в которой есть метод с именем closes_in, который вычисляет время, оставшееся от поля БД start_date:date до настоящего времени. В настоящее время мой запрос поиска:

    @tickets = Ticket.find(:all, 
                       :origin => @user.coords, 
                       :order => 'distance',

Я не могу просто вставить closes_in, так как получаю ошибку. Как мне сделать так, чтобы я мог использовать closes_in для сортировки запроса, если это метод, а не фактическое поле в БД?

Ответы [ 2 ]

2 голосов
/ 14 июля 2010

Используйте метод sort_by :

@tickets = Ticket.find(:all, :conditions => "foo").sort_by { |t| t.closes_in }
0 голосов
/ 15 июля 2010

Если вы используете MySQL:

@tickets = Ticket.all(:order => "DATEDIFF(CURDATE(), start_date)")

Если вы используете PostgreSQL:

@tickets = Ticket.all(:order => "AGE(start_date)")

Таким образом, вы используете БД для сортировки. Сортировка с использованием ruby ​​должна быть ограничена небольшим набором данных, который гарантированно останется небольшим.

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