Ce n'est pas un problème d'ActiveRecord ou d'AREL, c'est simplement la façon dont la sensibilité à la casse fonctionne dans SQL et PostgreSQL.
Les identificateurs en SQL (tels que les noms de table et de colonne) ne sont pas sensibles à la casse, sauf s'ils sont entre guillemets. Le SQL standard dit que les identifiants sans guillemets sont pliés en majuscules, PostgreSQL les plie en minuscules, d'où le bar.maxusers
dans le message d'erreur.
La solution consiste à citer le nom de la colonne incriminée :
.having('COUNT(foo.id) > bar."maxUsers"')
Notez que vous devez utiliser des guillemets doubles pour citer l'identifiant, car les guillemets simples ne concernent que les littéraux de chaîne. Notez également que la citation des identifiants est spécifique à la base de données :SQL standard et PostgreSQL utilisent des guillemets doubles, MySQL utilise des backticks, SQL Server utilise des crochets, ...