2010-07-23 16 views
5

Domanda sul default_scope con Rails 2/3. Sul mio progetto Rails 3, sto usando un lotto predefinito_scope per ordinare da created_at desc. Quindi, prima mi ha scritto:Domanda sul ActiveRecord metodo # default_scope e Ordinamento predefinito

 
default_scope order("created_at desc") 

in molti dei miei modelli. Ma il problema è che created_at esiste in quasi tutti i miei tabelle applicative ... Quindi, se scrivo una query che fa semplicemente un join su due tavoli, ottengo un errore di SQL colonna ambiguo created_at ... Così ho dovuto riscrivere tutto default_scopes per includere il table_name, come:

 
default_scope order("posts.created_at desc") 

c'è un modo migliore per gestire questo problema o è l'unica soluzione?

Grazie.

risposta

9

Si deve sempre specificare il nome della tabella quando si utilizza stringhe SQL in Rails in modo da evitare queste ambiguità. Nota che puoi fare:

default_scope order("#{table_name}.created_at desc") 
+0

Vorrei anche suggerire di avvolgerlo in apici inversi ('\' '), per ogni evenienza. –

+2

I backtick vanno bene per MySQL, ma sii consapevole che non fanno parte dello standard ANSI-SQL, quindi potrebbero causare problemi con altri server di database. –