我需要按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。 我用过会分页。
答案 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分页来选择有限的数据,并且必须检索完整的记录集,对它们进行排序,然后根据分页参数使用相关记录。随着联系人表的增长,它将持续增加响应时间。