Salut comment construire un named_scope qui sera commun pour tous les modèles.Comment utiliser common_scope pour tous les modèles ActiveRecord
Répondre
je le fais en plaçant ce code dans lib/has_common_named_scopes.rb
:
module HasCommonNamedScopes
def self.included(base)
base.class_eval {
# Named scopes
named_scope :newest, :order => "#{base.table_name}.created_at DESC"
named_scope :freshest, :order => "#{base.table_name}.updated_at DESC"
named_scope :limit, lambda { |limit| {:limit => limit} }
}
end
end
puis inclure le module dans chaque modèle où je besoin d'eux:
class MyModel < ActiveRecord::Base
include HasCommonNamedScopes
Je vous recommande d'utiliser base.table_name
à qualifier la table en faisant référence à des colonnes dans ces étendues nommées comme je le fais dans l'exemple. Sinon, vous rencontrez des problèmes avec des références ambiguës lorsque vous combinez ces étendues nommées avec d'autres étendues qui se joignent à d'autres tables.
Mise à jour:
scope
est utilisé dans Rails> 3 et named_scope
a été utilisé dans les versions précédentes.
Il ya aussi Thoughtbot's Pacecar, qui ajoute un tas d'étendues nommées très communes à chaque modèle. Il pourrait venir avec ce que vous cherchez. Si vous avez besoin de quelque chose de personnalisé, cependant, Casper Fabricius a la bonne idée.
Pour un projet Rails4 j'ai réalisé en prolongeant ActiveRecord::Base
, la classe tous les modèles Rails héritent de, dans un initialiseur (approche de rapiéçage de singe, méfiez-vous)
# in /config/initializers/shared_scope_initializer.rb
module SharedScopes
extend ActiveSupport::Concern
module ClassMethods
def named_scope
return where(attribute: value) # query here
end
end
end
ActiveRecord::Base.send(:include, SharedScopes)
- 1. ActiveRecord Global Callbacks pour tous les modèles
- 2. problème sur les modèles ActiveRecord pour SQLite
- 3. Utiliser un setter pour tous les modèles iVars
- 4. Utiliser Zend_Autoloader pour les modèles
- 5. Comment ajouter une association has_many sur tous les modèles
- 6. Tous les modèles Visio pour les interfaces de simulation?
- 7. Comment puis-je forcer Rails à charger tous les modèles?
- 8. autorisations sensibles (icône) liens d'action pour tous les modèles: comment?
- 9. Perl: Comment obtenir tous les modèles groupés
- 10. Comment utiliser le même tokenizer sur tous les modèles avec validates_length_of?
- 11. Cache tous les modèles d'une table
- 12. Comment extraire les common_scopes courants des modèles ActiveRecord
- 13. Les tâches ActiveRecord Migration & Rake ne chargeant pas les modèles?
- 14. Essayer de définir named_scopes et d'autres relations ActiveRecord sur tous les modèles
- 15. Tous les modèles Ruby pour traverser les DOM rapidement?
- 16. Comment tous les accesseurs d'attributs ActiveRecord peuvent-ils être bouclés?
- 17. comment utiliser les modèles django en XML?
- 18. Confus, avec activerecord, comment obtenir tous les articles?
- 19. Comment utiliser les rapports Jasper sans modèles
- 20. obtenir tous les cas de modèles connexes
- 21. ActiveRecord trouver tous les parents qui ont des enfants associés
- 22. (Rails, ActiveRecord) Comment utiliser les calculs ActiveRecord tout en récupérant les noms de champs?
- 23. Quand utiliser les modèles d'usine?
- 24. spec howto pas tous les modèles
- 25. Comment utiliser jQuery (ou similaire) pour extraire tous les CSS
- 26. Comment programmer pour utiliser tous les processeurs de votre machine?
- 27. ActiveRecord Modèles - Ajout de méthodes personnalisées
- 28. comment spécifier plusieurs relations entre les modèles dans les rails en utilisant les associations ActiveRecord
- 29. Comment commencer à utiliser les modèles et les pratiques efficacement?
- 30. Comment utiliser les objets dans les modèles de manière sécurisée