我正在使用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 :(得分:1)
default_scope includes(:shipment).order("shipments.file_number")
在这种情况下,显然所有的nils都将一起订购,因此您可以在shipment.blank中为视图中的“no ref”字符串添加逻辑?或者只是在视图中坚持使用reference_number方法。
答案 1 :(得分:1)
我可以向你推荐一种奇怪的方法,第一次重构
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