1

User モデルのデフォルト スコープを設定しようとしています。各ユーザーには 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 文字列関数の 1 つです。

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

于 2014-11-25T08:53:04.620 に答える