Ruby on rails 轨道3。如何按虚拟属性进行默认排序?

Ruby on rails 轨道3。如何按虚拟属性进行默认排序?,ruby-on-rails,ruby,activerecord,activeadmin,Ruby On Rails,Ruby,Activerecord,Activeadmin,我有一张发票;发票属于发货。 装运具有“参考号”属性 我正在使用activeadmin,我在索引页中列出了按文件编号排序的装运,如下所示 shipment.rb default_scope :order => :file_number 我想在索引页中列出按参考号排序的发票,问题是参考号是基于装运的虚拟属性 invoice.rb def reference_number if self.shipment.nil? a = "no ref" else self.shi

我有一张发票;发票属于发货。 装运具有“参考号”属性

我正在使用activeadmin,我在索引页中列出了按文件编号排序的装运,如下所示

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

在这种情况下,显然所有的NIL都将一起订购,因此您可以在Shipping.blank时在视图中为“no ref”字符串添加逻辑?或者在视图中使用reference\u number方法。

我可以向您推荐一种奇怪的方法,首先是重构

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

你可以在应用程序中排序。如果我这样做
链接到invoice.reference\u number,admin\u invoice\u path(invoice)
我没有得到这样的列:invoice.reference\u number error添加此meod后是否重新启动了服务器?当你的应用程序已经在开发中投入生产,而问题出现在另一个地方时,这一点很重要。。。
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