按姓氏排序

时间:2014-11-25 08:13:07

标签: ruby-on-rails default-scope

我正在尝试为我的用户模型设置默认范围。每个用户都有一个名称列。问题是我想通过姓氏的第一个字母订购用户。这将是名字中最后一个单词的开头。例如,用户名可能是“Kevin John Smith”,我想通过Smith订购。我目前有default_scope order('name ASC'),但这是按名字的第一个字母排序。我如何将其转换为按姓氏的第一个字母排序?谢谢!

1 个答案:

答案 0 :(得分:2)

试试这个:

User.select("users.*, SUBSTRING_INDEX(users.name, ' ', -1) AS lastname").limit(10).order('lastname ASC')

SUBSTRING_INDEX是mySQL字符串函数之一。

对于PostgreSQL split_part应该有效:

User.select("users.*, split_part(users.name, ' ', 3) AS lastname").limit(10).order('lastname ASC')

我不确定,但也尝试使用-1

User.select("users.*, split_part(users.name, ' ', -1) AS lastname").limit(10).order('lastname ASC')

因为,后者将确保使用分割后的最后一个字符串,这将涵盖用户只有名字和姓氏的情况。

请务必使用unscoped,这会返回此课程的范围,而不考虑default_scope