Question

J'ai un modèle listserver has_may: les

Pour la plupart de ma demande, je veux seulement amener les gens qui sont actifs

Alors @mailing_list.people ne doit renvoyer des personnes qui sont actives

Dans mon modèle, je ne peux pas faire

def people
  self.people.find_all{ |p| !p.activated_at.nil? }
end

parce que garde se fait appeler. Quel est le rubis / rails moyen de filtrer automatiquement les personnes. Une autre question possible est que je pense que self.people retourne un tableau d'objets d'enregistrement actif où self.people.find_all... retourne un tableau. Cela entraînera une partie de mon code à briser. Il est facile, mais est fixe il un moyen de retourner des objets record actifs? Il serait agréable d'avoir l'option.

Merci!

Était-ce utile?

La solution

Vous pouvez également filtrer au niveau de l'association.

has_many :people, :conditions => {:activated => true} 

Autres conseils

Ceci est un exemple parfait pour un champ nommé:

class Person < ActiveRecord::Base
  named_scope :active, :conditions => 'activated_at is not null'
end

Ensuite, il suffit l'appeler:

# equivalent to Person.find(:all, :conditions => 'activated_at is not null')
@active_people = Person.active 

Vous pouvez utiliser la méthode de recherche standard ou un viseur dynamique. Votre découverte pourrait se lire comme suit:

people.find (: all,: conditions => "activated_at = néant") OU people.find_all (: conditions => "activated_at = nil")

Une version dynamique de ce qui pourrait se lire comme:

people.find_by_activated_at (néant)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top