2013-08-15 8 views
8

C'è qualche differenza trarotaie differenza tra Model.count e Model.count (: all)

User.count 

e

User.count(:all) 

ho aggiornato rotaie a 4,0 allora quando lo uso ModelName.count(:all) che sta funzionando bene ma se uso il ModelName.count si verifica il seguente errore.Il modo in cui il bot funziona bene in rotaie 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

Non ho tale errore nei binari4 utilizzando Model.count. Quello che è strano nel tuo esempio è che sta cercando di eseguire select count() e numero di select count (*). Hai provato User.all.count? –

+0

Risultato: SELECT COUNT() FROM "users" PG :: WrongObjectType: ERRORE: count (*) deve essere utilizzato per chiamare una funzione aggregata senza parametri LINEA 1: SELECT COUNT() DA "users" –

+0

e cosa fa l'utente di output .tutti? –

risposta

4

mi sono imbattuto in questo problema pure. La modifica è stata introdotta in this commit. Una linea come

User.count 

ora genera un errore ActiveRecord::StatementInvalid dal momento che genererà SELECT COUNT() FROM users su Postgres. A partire da questa commesso, la correzione è quello di aggiornare il codice per

User.count(:all) 

This commit ripristina la funzionalità che esisteva precedentemente, utilizzando :all come la "colonna" di trasmettere ai Arel, provocando una query SQL valida SELECT COUNT(*) FROM users.

mio Gemfile originariamente aveva la seguente (come accennato nei commenti)

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

Ma avevo bisogno di correre bundle update rails di abbattere il più recente commit di cui sopra.