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