これは実際には別の答えではありません。結合についてコメントを残したかったのですが、コメントは長くなりません。コード例を提供したかったのです。
必要なのは、関連するテーブルのすべてのフィールドとカウントを取得することと、users.* フィールドなしでカウントを取得することです (場合によっては、カウントのない user.* フィールドだけを取得することもあります)。したがって、どちらが必要かをコードに伝える必要があります。あなたが探しているのは、デフォルトではuser.*フィールドとカウントを取得する例外タイプのものだと思いますが、カウントのみが必要な場合は、select('user.*')をオフにするように指定します。おそらくデフォルトのスコープを使用することを除いて、そのような解決策はないと思います。カウントのみのスコープを 1 つと、ユーザー フィールドとカウントのスコープを 1 つ持つことをお勧めします。
これが私がすることです:
class Users
has_many :likes
def self.with_count_likes
joins(:likes)
.select('users.*, count(likes.id) as count')
.group('users.id')
end
def self.count_likes
joins(:likes)
.select('users.id, users.username, count(likes.id) as count')
.group('users.id')
end
...
すべてのユーザー フィールドといいね数が必要な場合は、with_count_likes を呼び出します (またはクエリにチェーンします)。カウントといくつかの識別フィールドだけが必要な場合は、count_likes を呼び出します。
ここでは、カウントが必要な場合はいつでも、いくつかのユーザーフィールドでカウントの目的/(誰) を識別する必要があると想定しています。
一部のデータベース (Oracle など) では、「users.*」によるグループ化が必要な場合があることに注意してください。これは SQL の標準ですが、mySQL などの一部のデータベースは主キーのみを使用します。