2013-04-30 17 views
6

relazioni:colonna "users.id" deve apparire nella clausola GROUP BY o essere utilizzato in una funzione di aggregazione

Item belongs to Product 
Product belongs to User 

articolo modello portata:

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') 
    } 

I risultati sopra riportati nella seguente SQL dichiarazione:

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 

Il problema qui è che si verifica un errore:

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... 

Quale potrebbe essere una soluzione per questo?

risposta

-6

Da l'errore si può vedere che si dovrebbe cercare tra cui users.id nella clausola GROUP BY:

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

Non che raggruppare i record con lo stesso user.id? –

+0

@alexBrand, ho la domanda come il signor Obazee. –

+6

Sì, questa risposta non ha senso. Se si raggruppa per users.id, è come non raggruppare. – bronson

Problemi correlati