J'ai quelques modèles qui ont besoin d'avoir des conditions de recherche personnalisées placées sur eux. Par exemple, si j'ai un modèle Contact, chaque fois que Contact.find est appelé, je souhaite limiter les contacts renvoyés qui n'appartiennent qu'au compte utilisé.Remplacer "trouver" dans ActiveRecord la manière DRY
J'ai trouvé ce via Google (que j'ai personnalisé un peu):
def self.find(*args)
with_scope(:find => { :conditions => "account_id = #{$account.id}" }) do
super(*args)
end
end
Cela fonctionne très bien, sauf pour les quelques occasions où account_id est ambigu si je l'ai adapté à:
def self.find(*args)
with_scope(:find => { :conditions => "#{self.to_s.downcase.pluralize}.account_id = #{$account.id}" }) do
super(*args)
end
end
Cela fonctionne également très bien, cependant, je veux qu'il soit sec. Maintenant, j'ai quelques modèles différents que je veux utiliser ce genre de fonction. Quelle est la meilleure façon de procéder?
Lorsque vous répondez, veuillez inclure le code pour aider nos esprits à saisir la métaprogrammation Ruby-fu.
(j'utilise Rails v2.1)
Merci Jean, qui fonctionnera un traitement et est probablement la bonne façon pour le faire. L'introduction du compte est un nouvel ajout au code existant, donc je suppose que j'étais trop compliquer les choses en venant de cette perspective. Je vais juste passer en revue et modifier le code existant pour être étendu par le compte. –