Đây không phải là vấn đề ActiveRecord hoặc AREL, đây chỉ là cách hoạt động của phân biệt chữ hoa chữ thường trong SQL và PostgreSQL.
Các số nhận dạng trong SQL (chẳng hạn như tên bảng và cột) không phân biệt chữ hoa chữ thường trừ khi chúng được trích dẫn. SQL tiêu chuẩn nói rằng các số nhận dạng chưa được trích dẫn được xếp thành chữ hoa, PostgreSQL gấp chúng thành chữ thường, do đó bar.maxusers
trong thông báo lỗi.
Giải pháp là trích dẫn tên cột vi phạm:
.having('COUNT(foo.id) > bar."maxUsers"')
Lưu ý rằng bạn phải sử dụng dấu ngoặc kép để trích dẫn mã định danh vì dấu ngoặc kép đơn chỉ dành cho các ký tự chuỗi. Cũng lưu ý rằng trích dẫn mã định danh là dành riêng cho cơ sở dữ liệu:SQL tiêu chuẩn và PostgreSQL sử dụng dấu ngoặc kép, MySQL sử dụng dấu ngoặc kép, SQL Server sử dụng dấu ngoặc, ...