1

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

4

1 回答 1

2

尝试这个:

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

SUBSTRING_INDEX是 mySQL 字符串函数之一。

对于 PostgreSQLsplit_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.

于 2014-11-25T08:53:04.620 回答