2010-08-09 13 views
1

J'ai un modèle appelé Contact.Comment ajouter l'équivalent d'un: conditions dans une étendue pour un modèle?

J'ai ajouté la méthode suivante: à ceux sélectionnés (:

def all_completed_events 
    # for a given Contact, return all contact_events records that exist and where sugarcrm = false 
    return (self.contact_letters + self.contact_postalcards + self.contact_emails + self.contact_voicemails + self.contact_calls) 
end 

Ce qui manque à ce que je ne veux que self.contact_letters.find (conditions => "= false de SugarCRM") sugarcrm est booléen). (évidemment ceci est appliqué à travers les autres modèles, contact_letters, contact_emails, etcetera)

Comment fais-je cela?

Répondre

0

Vous pouvez également définir un autre champ du nom et de la chaîne il:

named_scope nosugar, :conditions => { :sugarcrm => false } 

def all_completed_events 
    return self.contact_letters.nosugar + self.contact_postalcards.nosugar + ... 
end 

Selon la façon dont votre modèle ContactEvent est mis en œuvre (est-ce STI-vous retournerez tous contact_events ou juste un sous-ensemble spécifique d'entre eux?) vous pourriez le descendre à quelque chose de plus comme:

return self.contact_events.nosugar 
+0

ContactEvent n'est pas un modèle. J'ai séparé ContactLetter, ContactPostalcard, etcetera. Puis-je regrouper tous les éléments et appliquer ensuite la portée nommée à la fin? – Angela

+0

Je pense que vous devriez pouvoir tirer parti de votre méthode 'all_completed_events' comme ceci:' self.all_completed_events.nosugar'. Pas sûr à 100% cependant - besoin d'une console de rails pour le tester! – nfm

0

Peut-être essayer ceci:

(self.contact_letters + self.contact_postalcards + self.contact_emails + self.contact_voicemails + self.contact_calls).select {|record| !record.sugarcrm }