2013-06-24 7 views
0

У меня есть именованная область, вызываемая в методе класса. В массиве выполняется дополнительная сортировка. То, что я хочу сделать, это сделать named_scope и отсортировать его за один шаг. Атрибут, который я сортирую, не является столбцом в базе данных, это вычисленное значение. Мне нужна самая старая транзакция в статусе «Создано».Rails 3 ActiveRecord Сортировка по вычисленному атрибуту

scope :transactions_in_created_status, 
     where('trnsts in (?) and regsam = ?', 'Created', TYPE) 

def self.oldest_transaction_in_created_status 
    result = Transaction.transactions_in_created_status.sort{|a,b|   [a.update_date,a.update_time] <=> [b.update_date, b.update_time]}   
    result[0] 
end 

Я пробовал точно то, что размещено ниже, но я получаю ошибку ODBC "update_date" не найден.
Защиту UPDATE_DATE преобразует ММДДГГ в ccyymmdd КОНЕЦ

ответ

1
scope :transactions_in_created_status, 
     where('trnsts in (?) and regsam = ?', 'Created', TYPE).order('update_date DESC, update_time DESC') 

Тогда, чтобы получить 1 вы можете просто позвонить первым:

Transaction.transactions_in_created_status.first 
+0

Спасибо за вашу помощь и предложения. Я все еще сталкиваюсь с трудностями при использовании .order в вычисленных полях. – Pan

0
scope :transactions_in_created_status, 
    where('trnsts in (?) and regsam = ?', 'CREATED', TYPE) do 
    def oldest 
     sort{|a,b|[a.update_date,a.update_time] <=> [b.update_date, b.update_time]}.first  
    end 
    end