2010-07-23 5 views
5

Question sur default_scope avec Rails 2/3. Sur mon projet Rails 3, j'utilise beaucoup default_scope pour commander par created_at desc. Alors d'abord j'ai écrit:Question sur ActiveRecord # default_scope méthode et la commande par défaut

 
default_scope order("created_at desc") 

dans plusieurs de mes modèles. Mais le problème est que created_at existe dans presque toutes mes tables d'application ... Donc, si j'écris une requête qui fait simplement une jointure sur deux tables, j'obtiens une colonne d'erreur SQL created_at ... Donc j'ai dû réécrire tous default_scopes d'inclure le table_name, comme:

 
default_scope order("posts.created_at desc") 

est-il une meilleure façon de gérer ce problème ou est-ce la seule solution?

Merci.

Répondre

9

Vous devez toujours spécifier le nom de la table lorsque vous utilisez des chaînes SQL dans Rails afin d'éviter ces ambiguïtés. Notez que vous pouvez faire:

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

Je suggère également de l'emballer en arrière ('\' '), juste au cas où. –

+2

Les backticks conviennent à MySQL, mais sachez qu'ils ne font pas partie de la norme ANSI-SQL, ce qui peut causer des problèmes avec d'autres serveurs de base de données. –

Questions connexes