2010-08-17 5 views
0

J'essaie d'aller chercher toutes les personnes sans inscription pour un événement spécifique.Récupérer des personnes sans inscription pour un événement spécifique

Mes modèles sont Personne, Événement et Enregistrement.

Dans la table MySQL, il ajouterait une entrée à la table des enregistrements avec les person.id et event.id (plus un commentaire et un "status" - 1 pour l'enregistrement, 2 pour le désenregistrement). Maintenant, j'essaye d'obtenir toutes les personnes qui n'ont fait aucune action, toutes les inscriptions et toutes les désinscriptions (dans cet ordre). Comment puis je faire ça?

modifier: puis-je ajouter un peu plus d'informations:

Structure en base de données:
personnes: id, nom, courrier ...
événements: id, titre, date ...
inscriptions : id, person_id, event_id, status ...

Problème:
Il est facile de sélectionner tous les enregistrements et les désenregistrements. Mais je dois également sélectionner toutes les personnes qui n'ont rien fait pour un événement.

Une façon dont j'ai pensé à est de sélectionner toutes les personnes du modèle de personnes. Sélectionnez ensuite tous les enregistrements de l'événement spécifique, puis comparez les deux tableaux. Qu'est-ce que tu penses?

Répondre

0

je l'ai fait ce qui suit :

Sélectionnez tous les contacts, puis parcourez tous les événements et sélectionnez tous les utilisateurs enregistrés ou désenregistrés. Puis soustrayez-les de toutes les personnes ...

C'est tout.


#model 
def all_register_people 
    registrations = Registration.find_all_by_event_id self.id 
    people = [] 

    for registration in registrations 
     people "shift" registration.person 
    end 

    people 
    end 

#view 
all_people = Person.all(:order => "firstname") 

... 

register_event_people = event.all_register_people 
people_no_action = all_people - register_event_people 

people_reg = Person.all(...) 
people = people_no_action | people_reg 

« changement » signifie « < < »

0

En Ruby Controller:

@persons = Person.all(:order => "status ASC") 
+0

Cela ne fonctionnera pas parce que le statut est dans le modèle des « inscriptions » et l'inscription est d'un événement spécifique – andi

0

Si vous voulez faire le tri dans votre vue, vous pouvez également utiliser la méthode #SELECT sur tous les objets personne:

#controller 
@people = Person.all 

#view 
<h2> registered people </h2> 
<% @people.select { |person| person.status == 1 }.each do |reg| %> 
.... 
<% end %> 

<h2> de-registered people </h2> 
<% @people.select { |person| person.status == 2 }.each do |reg| %> 
.... 
<% end %> 
+0

Je pense que ne fonctionnerait pas, parce que une personne n'a pas ou une inscription par événement. Il y a donc plusieurs événements où une personne peut s'inscrire ou se désinscrire. Si quelqu'un s'inscrit, il ajouterait une inscription pour cet événement avec "status = 1" – andi

+0

ok, juste tirant de la hanche sans voir votre code ou des tests. Au lieu de @people = Person.all, je pense que vous pourriez le remplacer par @people = Event.find (1) .people et cela n'emporterait que les gens pour cet événement unique – brycemcd

Questions connexes