2010-07-23 8 views
5

Pregunta sobre default_scope con Rails 2/3. En el proyecto de my Rails 3, estoy usando mucho default_scope para ordenar por created_at desc. Así que primero me escribió:Pregunta sobre el método ActiveRecord # default_scope y el orden predeterminado

 
default_scope order("created_at desc") 

en muchas de mis modelos. Pero el problema es que created_at existe en casi todas mis tablas de aplicaciones ... Así que si escribo una consulta que simplemente hace una combinación en dos tablas, obtengo una columna ambigua de error SQL created_at ... Así que tuve que reescribir todo default_scopes para incluir el nombre_tabla, como:

 
default_scope order("posts.created_at desc") 

¿hay una mejor manera de manejar este problema o se trata de la única solución?

Gracias.

Respuesta

9

Siempre debe especificar el nombre de la tabla cuando utilice cadenas de SQL en Rails para evitar estas ambigüedades. Tenga en cuenta que puede hacer:

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

También sugiero que se ajuste en los palos de atrás ('\' '), por las dudas. –

+2

Backticks están bien para MySQL, pero tenga en cuenta que no son parte del estándar ANSI-SQL, por lo que pueden causar problemas con otros servidores de bases de datos. –

Cuestiones relacionadas