我的数据库有一个列,在同一字段中包含客户的名字和姓氏(它是通过API以这种方式格式化的)。
要按客户的姓氏排序,我需要拆分字符串。
schedule_projects.sort_by{|x| x.sold_to_name.split(" ").last}
然而,对于我们在这个应用程序中进行的所有其他排序,我们使用order方法,然后调用.page
但是sort_by方法返回的是一个数组而不是ActiveRecord关系。而且你不能在数组上调用.page。
作为一个临时的解决方案,我们只是在sold_to_name上调用.order。但是我们真的希望能够按照客户的姓氏对这些进行排序。有没有办法在不将输出转换为数组的情况下按照块进行排序?
2条答案
按热度按时间qnakjoqk1#
PostgreSQL有split_part函数。第一个参数是文本,第二个参数是分隔符,第三个参数是位置,在本例中是最后一个。
tnkciper2#
在不加载记录的情况下按块排序实际上是不可能的。为了在Ruby中处理记录,您需要实际将数据放入应用程序中。
一个简单的解决方案是在order子句中使用SUBSTRING或SPLIT_PART等数据库函数将字符串分解为多个部分。它将工作得很好,直到它实际遇到现实,你必须处理:
不幸的是,通过编程将全名分割成其组成部分的想法被打破了,如果没有良好的输入数据,您实际上将无法正确地实现这一点。