IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ruby on Rails Discussion :

Classer par date


Sujet :

Ruby on Rails

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2008
    Messages : 11
    Points : 5
    Points
    5
    Par défaut Classer par date
    Bonsoir!

    Je cherche un moyen de classer mon objet "Gymnaste" par date d'anniversaire. J'arrive a le classer d'une manière chronologique 1985 -> 1999 par exemple, de la facon suivante: Gymnaste.find(:all, :order => "date DESC").

    Par contre, j'arrive pas à avoir les dates classées sur l'année, pour pouvoir voir qui va avoir son anniversaire bientôt, qui l'a deja eu, etc...

    Avec gymnaste.date.strftime("%j") j'arrive a avoir le numéro du jour de l'année, mais pas a classer d'après ca (avec un sort_by{|k| k[:date].strftime("%j")} ca ne marche pas)

    Une solution miracle peut etre ?

    Merci d'avance, bonne soirée !

  2. #2
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    Bonsoir

    Ton champs "date", il ne contiens que l'année, ou bien la totale ?

    S'il y a tout, le tri devrait se faire y compris sur les mois et sur les jours.

    Si tu as un champs année, un champs mois et un champs jour, tu peux faire un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    :order => "annee DESC, mois DESC, jour DESC"
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2008
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Merci pour ta réponse

    C'est un champ qui contient tout (jour/mois/année)

    j'arrive a trier d'un point de vu chronologique (du plus jeune au plus vieux), mais pas au niveau de la date d'anniversaire dans l'année

    Je sais pas si je suis assez claire, je vais faire un petit exemple avec 4 dates

    J'arrive a avoir cet ordre:
    12-02-1984
    03-05-1990
    15-01-1991
    21-09-2000

    Et je voudrai celui-ci
    15-01-1991
    12-02-1984
    03-05-1990
    21-09-2000

    En gros, virer l'info de l'année, garder que jour et mois

  4. #4
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    Si tu récupères les 0 pour les mois, et les 0 pour les jours, c'est parfait, puisque je te propose une comparaison de chaîne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    a = User.find :all
    b = a.sort { |x, y| (x.date_naissance.month.to_s + '-' + x.date_naissance.day.to_s) <=> (y.date_naissance.month.to_s + '-' + y.date_naissance.day.to_s) }
    si tu as bien tout tes 0 en début de chaîne pour les numéro de mois et de jour de longueur 1, ça va passer pile poil

    Après, c'est sans aucun doute possible de le faire directement dans ton :order en SQL, mais là, je passe la main au forum sur le langage SQL

    PB
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2008
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Merci, ca m'avance deja un petit bout!

    La date est dans mysql au format yyyy-mm-dd, avec les 0 devant, par contre date_naissance.month vire les 0, du coup ca me classe les mois tel quel:
    janvier - novembre - decembre - février - etc

    Ca serait possible d'interagir au niveau du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x.date_naissance.month.to_s
    pour lui dire que si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x.date_naissance.month.to_s.size == 1
         => "0" + x.date_naissance.month.to_s
    et tout ca sans sortir du sort ?

  6. #6
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    on va passer par strftime :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    b = a.sort { |x, y| (x.date_naissance.strftime('%m') + '-' + x.date_naissance.strftime('%d')) <=> (y.date_naissance.strftime('%m') + '-' + y.date_naissance.strftime('%d')) }
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  7. #7
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    voir même encore plus propre, et direct :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    b = a.sort { |x, y| x.date_naissance.strftime('%m%d') <=> y.date_naissance.strftime('%m%d') }
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 104
    Points : 120
    Points
    120
    Par défaut
    Pourquoi tu joues pas avec les opérateurs MySQL ? Surtout qu'a mon avis c'est bien plus rapide que d'utiliser Ruby pour ça.
    T'arrive pas à avoir ce que tu veux avec des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    YEAR(Ton_Champ_Date) et MONTH(Ton_Champ_Date)
    ?
    ( http://dev.mysql.com/doc/refman/5.0/...#function_year )

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2008
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par titoumimi Voir le message
    voir même encore plus propre, et direct :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    b = a.sort { |x, y| x.date_naissance.strftime('%m%d') <=> y.date_naissance.strftime('%m%d') }
    Ca a marché comme ca merci beaucoup !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Classer par dates dans un listview
    Par AmauryLondon dans le forum Excel
    Réponses: 0
    Dernier message: 02/07/2012, 13h58
  2. Classer des résultats par date/heure
    Par PedroBD dans le forum Langage SQL
    Réponses: 12
    Dernier message: 27/11/2006, 15h48
  3. Classer des fichiers par date
    Par lorentdups dans le forum Langage
    Réponses: 3
    Dernier message: 01/10/2006, 17h14
  4. Classer des messages par date ET par pertinence
    Par pocpoc2 dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 04/07/2005, 10h54
  5. classer par date les resultats de 2 tables avec UNION
    Par dgedge dans le forum Requêtes
    Réponses: 4
    Dernier message: 14/06/2005, 19h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo