Nota bene : count marche extrêmement bien avec des named_scopes. Exemples :

En admettant que tu fasse tes modèles Saisie et Personne comme ça :

class Personne < AR::B
...
has_many :saisies
...
end

class Saisie < AR::B
...
belongs_to :personne
named_scope for_date_saisie, lambda { |date| { :conditions => { :date_saisie
=> date } } }
named_scope for_matin_aprem, :conditions => { :matin_aprem => true }
...
end

Ca va faire précisément le count que tu veux en une seule requête :

personne.saisies.for_date_saisie(date).for_matin_aprem.count

Magik

Michel Belleville


2009/12/4 Cyril Mougel <[email protected]>

>
> pestak a écrit :
> > Bonjour,
> >
> > Lorsque j'essaye de compter le nombre d'enregistrement de ma table
> > saisies suivant une date et une personne j'obtiens l'erreur "too few
> > arguments".
> > Comment dois-je procéder?
> > Merci d'avance
> >
> > # recherche si la saisie n'existe déjà pas pour la journée
> > saisie_rech_matin = Saisie.count_by_sql(["SELECT count(*) FROM saisies
> > WHERE date_saisie=? and matin_aprem=1 and
> > personne_id=?",@saisie_matin.date_saisie,@saisie_matin.personne_id])
> > saisie_rech_aprem = Saisie.count_by_sql(["SELECT count(*) FROM saisies
> > WHERE date_saisie=? and matin_aprem=2 and
> > personne_id=?",@saisie_aprem.date_saisie,@saisie_aprem.personne_id])
> >
> > #saisie_rech_matin = Saisie.count( :conditions =>["date_saisie=? and
> > matin_aprem=1 and
> > personne_id=?",@saisie_matin.date_saisie,@saisie_matin.personne_id] )
> > #saisie_rech_aprem = Saisie.count( :conditions =>["date_saisie=? and
> > matin_aprem=1 and
> > personne_id=?",@saisie_aprem.date_saisie,@saisie_aprem.personne_id] )
> >
> > #si pas de saisie pour la date et la personne
> > if saisie_rech_matin==0 and saisie_rech_aprem==0
> >    ....
> >
>
> Aucun interet de faire du SQL dans tes requêtes. Passe par un bon vieux
> AR#count
>
> --
> Cyril Mougel
> http://blog.shingara.fr/
>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de 
Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse 
[email protected]
Pour résilier votre abonnement envoyez un e-mail à l'adresse 
[email protected]
-~----------~----~----~----~------~----~------~--~---

Répondre à