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 :

ActiveRecord : find en mixant conditions sous forme de Hash et de Array


Sujet :

Ruby on Rails

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 171
    Points : 91
    Points
    91
    Par défaut ActiveRecord : find en mixant conditions sous forme de Hash et de Array
    Salut,

    Le titre de ce topic n'est peut-être pas très clair donc je vais expliquer plus clairement le problème que je rencontre :

    Sur mon modèle Article, je souhaiterais faire un find selon plusieurs critères dont la date de création de l'article, mais aussi d'autres critères. Je ne parviens pas à mixer ces conditions.

    Si je souhaite imposer que mon article ait été créé entre 2 dates from et to, je dois effectuer une requête du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Article.find(:all, :conditions=> ['created_on BETWEEN ? AND ?', from, to ])
    Et si je souhaite imposer le nom de son auteur et la catégorie, je peux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Article.find(:all, :conditions=> {:auteur=>"Bob", :categorie=>"Sport"})
    Si je veux mixer les 2 je peux bien sûr faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Article.find(:all, :conditions=> ['created_on BETWEEN ? AND ? AND auteur = ? AND categorie = ?', from, to, "Bob", "Sport" ])
    MAIS cela suppose que les critères supplémentaires sont fixés par avance ("auteur" et "catégorie" ici). Or dans mon cas, ils ne sont pas définis à l'avance! Des critères supplémentaires peuvent apparaître, comme "sous_categorie" ou "public". J'ai donc besoin d'un système plus flexible que les conditions sous forme d'un Array.

    J'ai un Hash de conditions formé de façon dynamique et un Array fixe, et je dois trouver un moyen de réunir les 2 pour faire mon find.

    Quelqu'un voit une solution?

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    Pas besoin d'utiliser un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Profile.find(:all, :conditions => {:created_at => 5.days.ago..Time.now})
     
    Profile Load (0.5ms)   SELECT * FROM "profiles" WHERE ("profiles"."created_at" BETWEEN '2009-02-20 21:03:06' AND '2009-02-25 22:03:06')
    Mais si vraiment tu en as besoin, je pense que tu peux t'en tirer avec with_scope.
    Toute la documentation Ruby on Rails : gotapi.com/rubyrails
    Mes articles :
    > HAML : langage de template pour Ruby on Rails

Discussions similaires

  1. find: mettre des critères sous forme de variable
    Par Sve@r dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 22/09/2014, 12h47
  2. Condition de test sous forme de variable
    Par riete dans le forum Langage
    Réponses: 5
    Dernier message: 04/01/2008, 17h34
  3. [Formulaire] sous-form dépendant de conditions
    Par guy2004 dans le forum IHM
    Réponses: 11
    Dernier message: 02/04/2006, 10h42
  4. [Turbo Pascal] Entrée au clavier sous forme ******
    Par Upal dans le forum Turbo Pascal
    Réponses: 12
    Dernier message: 15/02/2003, 14h42
  5. créer une arborescence windows sous forme d'arbre java
    Par chupachoc dans le forum Composants
    Réponses: 3
    Dernier message: 01/10/2002, 16h48

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