2013-04-30 30 views
6

mối quan hệ:cột "users.id" phải xuất hiện trong mệnh đề GROUP BY hoặc được sử dụng trong một chức năng tổng hợp

Item belongs to Product 
Product belongs to User 

mục mô hình phạm vi:

scope :search, ->(search_term) { 
    select('products.name, users.*, products.brand, COUNT(products.id)') 
    .joins(:product => :user) 
    .where('users.name = ? OR products.brand = ?', search_term, search_term) 
    .group('products.id') 
    } 

Các kết quả trên trong SQL sau tuyên bố:

SELECT products.name, users.*, products.brand, COUNT(products.id) FROM "items" 
INNER JOIN "products" ON "products"."id" = "items"."product_id" 
INNER JOIN "users" ON "users"."id" = "products"."user_id" 
WHERE (users.name = 'Atsuete Lipstick' OR products.brand = 'Atsuete Lipstick') 
GROUP BY products.id 

Vấn đề ở đây là lỗi xảy ra:

ActiveRecord::StatementInvalid: PG::Error: ERROR: column "users.id" 
must appear in the GROUP BY clause or be used in an aggregate function 
LINE 1: SELECT products.name, users.*, products.brand, COUNT(product... 

Điều gì có thể khắc phục cho điều này?

Trả lời

-6

Từ lỗi mà bạn có thể thấy rằng bạn nên cố gắng bao gồm users.id trong mệnh đề GROUP BY:

.group('products.id, users.id') 
+5

sẽ không phải là hồ sơ nhóm với user.id giống nhau không? –

+0

@alexBrand, tôi có câu hỏi là ông Obazee. –

+6

Có, câu trả lời này không có ý nghĩa. Nếu bạn nhóm theo users.id, điều đó giống như không nhóm. – bronson

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