2009-08-25 4 views

Répondre

17

Vous pouvez utiliser default_scope:

class ExampleModel < ActiveRecord::Base 
    default_scope :conditions => ["status = ?", "active"] 
end 

Si vous voulez utiliser dans tous vos modèles, vous pouvez soit la sous-classe ActiveRecord::Base et tirer de ce dans tous vos modèles (probablement ne fonctionne pas bien avec simple héritage de table):

class MyModel < ActiveRecord::Base 
    default_scope :conditions => ["status = ?", "active"] 
end 
class ExampleModel < MyModel 
end 

... ou vous pouvez régler le default_scope sur lui-même ActiveRecord::Base (pourrait être gênant si vous décidez qu'un modèle ne devrait pas avoir cette portée par défaut):

class ActiveRecord::Base 
    default_scope :conditions => ["status = ?", "active"] 
end 
class ExampleModel < ActiveRecord::Base 
end 

Comme mentionné par klochner dans un commentaire, vous pouvez également envisager d'ajouter un named_scope à ActiveRecord::Base, nommé active, par exemple:

class ActiveRecord::Base 
    named_scope :active, :conditions => ["status = ?", "active"] 
end 
class ExampleModel < ActiveRecord::Base 
end 
ExampleModel.active # Return all active items. 
+0

comment à propos d'une portée nommée sur ActiveRecord :: Base? Cela serait moins susceptible de perturber les autres développeurs si le projet est partagé. – klochner

+0

@klochner, oui, bon point. Utiliser quelque chose comme ExampleModel.active est très expressif. – molf

+0

pour le nettoyer un peu plus, vous pouvez dériver une classe d'ActiveRecord qui a la portée nommée (ou nouvelle par défaut), et que ExampleModel en dérive. Maintenant, la nouvelle fonctionnalité est explicite. – klochner

0

Mise à jour:named_scope était deprecated/renamed dans Rails 3.1. A partir de 3.2.8, la nouvelle méthode est appelée scope qui utilise la méthode where au lieu de :conditions

Vieux:

named_scope :active, :conditions => ["status = ?", "active"] 

Nouveau:

scope :active, where(:status => "active") 

ou

scope :active, where("status = ?", "active") 
Questions connexes