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.
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
@klochner, oui, bon point. Utiliser quelque chose comme ExampleModel.active est très expressif. – molf
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