2012-01-17 53 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

你可以排序的應用。 – 2012-01-17 18:12:51

+0

如果我這樣做'link_to invoice.reference_number,admin_invoice_path(invoice)'我得到一個沒有這樣的列:invoice.reference_number錯誤 – leonel 2012-01-17 18:15:26

+0

您是否在添加此meod後重新啓動服務器?這是很重要的,當你的應用程序已經在開發生產其wheater和問題是在另一個地方... – davidb 2012-01-17 18:21:02

回答

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