2012-01-17 4 views
1

У меня есть один счет-фактура; и счет-фактура относится к отгрузке. Отгрузка имеет атрибут reference_number.Rails 3. Как сортировать по умолчанию по виртуальному атрибуту?

Я использую activeadmin и я перечисляю поставки, отсортированные по file_number в индексной страницы, как это ...

shipment.rb 
default_scope :order => :file_number 

Я хочу, чтобы перечислить счета-фактуры на странице индекса отсортированные по номеру , проблема в том, что ссылочный номер является виртуальным атрибутом, основанным на поставках.

invoice.rb 
def reference_number 
    if self.shipment.nil? 
    a = "no ref" 
    else 
    self.shipment.file_number 
    end 
end 
+0

Вы можете сортировать в приложении , –

+0

если я делаю это 'link_to invoice.reference_number, admin_invoice_path (invoice)' Я получаю такой столбец: invoice.reference_number error – leonel

+0

Вы перезапустили свой сервер после добавления этого meod? Это имеет значение, когда ваше приложение уже находится в процессе разработки в своем развитии, и проблема находится в другом месте ... – davidb

ответ

1
default_scope includes(:shipment).order("shipments.file_number") 

В этом случае, очевидно, все Нильс будут заказаны вместе, так что вы можете добавить логику для «нет реф» строка в виду, когда shipment.blank? или просто придерживаться метода reference_number в представлении.

1

Я могу предложить вам странный метод, первый refactory

invoice.rb 
def reference_number 
    self.shipment.nil? ? "no ref" : self.shipment.file_number 
end 

def <=> (obj2) 
    self.reference_number <=> obj2.reference_number 
end 
def < (obj2) 
    self.reference_number < obj2.reference_number 
end 
def > (obj2) 
    self.reference_number > obj2.reference_number 
end 
def == (obj2) 
    self.reference_number = obj2.reference_number 
end 

это все !, когда вы заполняете вид, вы должны включать (сортировки):

@invoices= Invoice.all.sort 
Смежные вопросы