2
@users = User.registred
        .includes(:items)
        .joins('LEFT OUTER JOIN items ON users.id=items.user_id')
        .group(User.column_names.collect do |c| "#{User.table_name}.#{c}" end.join(','))
        .order('CASE WHEN LENGTH(users.profile_picture) > 0 THEN 0 ELSE 1 END, followers_count DESC, bibbed_items_count DESC, SUM(items.user_likes_count) DESC, users.id')

どこregistered = where("deactivated_at IS NULL AND last_sign_in_at IS NOT NULL")

カミナリはグループ句で動作しません。このクエリでグループ句を最適化する方法は?

4

2 に答える 2

3

同じ問題があり、句に適切idな値を指定することで、あなたのように修正しました。groupただし、元のグループ句を置き換える必要はないようです-追加の呼び出しを追加するだけです:

@users = User.registred
    .includes(:items)
    .joins('LEFT OUTER JOIN items ON users.id=items.user_id')
    .group(User.column_names.collect do |c| "#{User.table_name}.#{c}" end.join(','))
    .order('CASE WHEN LENGTH(users.profile_picture) > 0 THEN 0 ELSE 1 END, followers_count DESC, bibbed_items_count DESC, SUM(items.user_likes_count) DESC, users.id')
    .group('users.id')
于 2013-09-06T11:18:16.280 に答える