按行排序的问题(特例)

时间:2011-08-05 08:13:59

标签: ruby-on-rails activerecord will-paginate

我需要按primary_contact_no排序联系人记录。
我的联系人字段包含primary_contact_no,email,mobile_no。

这不是一个更聪明的人......

但是当 primary_contact_no 不存在时,我的观点要求我在联系电话号码(查看标签)下显示 mobile_no

Contacts.find(:all, :order => "primary_contact_no")

现在当我按 primary_contact 对其进行排序时,在视图中,缺少这些字段的记录会被 mobile_no 替换,但由于它们已经按contact_no排序,因此它们会出现在搜索结果的底部。

如何合并两个结果(如果 primary_contact 不存在并对组合记录执行搜索)

还有其他解决问题的方法,我可以将行搜索记录或类似的内容组合起来

P.S。 我用过会分页

2 个答案:

答案 0 :(得分:1)

一旦从数据库中检索它们,您就可以订购。

所以

contacts = Contact.all
u.sort!{|a,b| a.con_number<=> b.con_number}

然后在您的联系模式中

def con_number
  primary_contact_no||mobile_no
end

答案 1 :(得分:1)

MySQL和PostgreSQL都有COALESCE功能,所以你可以这样做:

Contacts.find(:all, :order => "COALESCE(primary_contact_no,mobile_no)")

根据需要对记录进行排序。但要注意,使用sql函数和原始sql有其警告。如果您决定切换数据库,则必须检查新RDBMSI是否支持您使用的每个原始sql和sql函数。

我不会对我的应用程序中的记录进行排序,因为这意味着,我不能使用paginate分页来选择有限的数据,并且必须检索完整的记录集,对它们进行排序,然后根据分页参数使用相关记录。随着联系人表的增长,它将持续增加响应时间。