2013-08-15 40 views
8

Có sự khác biệt giữaray chênh lệch giữa Model.count và Model.count (: tất cả)

User.count 

User.count(:all) 

tôi nâng cấp đường ray đến 4,0 sau đó khi tôi sử dụng ModelName.count(:all) nó làm việc tốt nhưng nếu tôi sử dụng ModelName.count lỗi sau xảy ra.Bởi cách bot của chúng hoạt động tốt trong đường ray 3.2

SELECT COUNT() FROM "users" 
PG::WrongObjectType: ERROR: count(*) must be used to call a parameterless aggregate function 
LINE 1: SELECT COUNT() FROM "users" 
+1

Tôi không có lỗi như vậy trong đường ray4 bằng cách sử dụng Model.count. Có gì lạ trong ví dụ của bạn là nó đang cố gắng thực hiện chọn đếm() insteand của số lượng lựa chọn (*). Bạn đã thử User.all.count chưa? –

+0

Kết quả: CHỌN COUNT() TỪ "người dùng" PG :: WrongObjectType: ERROR: count (*) phải được sử dụng để gọi hàm tổng hợp parameterless LINE 1: SELECT COUNT() FROM "users" –

+0

và người dùng đầu ra .tất cả các? –

Trả lời

4

Tôi chạy vào vấn đề này là tốt. Thay đổi đã được giới thiệu trong this commit. Một dòng như

User.count 

bây giờ sẽ ném ra một lỗi ActiveRecord::StatementInvalid vì nó sẽ tạo ra SELECT COUNT() FROM users trên Postgres. Tính đến cam kết này, việc sửa chữa là để cập nhật mã của bạn để

User.count(:all) 

This commit phục hồi các chức năng đã tồn tại trước đó, sử dụng :all là "cột" để truyền lại cho Arel, gây ra một truy vấn SQL hợp lệ SELECT COUNT(*) FROM users.

My Gemfile ban đầu đã có những điều sau (như đã đề cập trong các ý kiến)

gem "rails", github: "rails/rails", branch: "4-0-stable" 

nhưng tôi cần thiết để chạy bundle update rails để kéo xuống mới hơn cam kết tham chiếu ở trên.

Các vấn đề liên quan