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 :

DRY dans le cas d'une relation 1-N


Sujet :

Ruby on Rails

  1. #1
    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 DRY dans le cas d'une relation 1-N
    Bonjour à tous

    Je suis en train de faire mumuse avec rails, et dans le cadre d'une relation 1-N, pour le moment, je récupére les infos des autres tables comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      def new
        @projets_user = ProjetsUser.new
        @projets = Projet.find_all
        @users = User.find_all
      end
     
      def edit
        @projets_user = ProjetsUser.find(params[:id])
        @projets = Projet.find_all
        @users = User.find_all
      end
    ...
    hors, ça respecte moyennement le principe "Ne pas se répéter", heureusement que je n'ai que deux tables...

    Sauriez-vous comment faire en sorte que cette récupération s'applique en une seule déclaration à toutes mes méthodes SVP ?

    d'avance
    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

  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
    PS : j'ai bien essayé de passer ça en variable de classe, mais on dirait que ça le contrarie :p

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class ProjetsUsersController < ApplicationController
     
      @@projets = Projet.find_all
      @@users = User.find_all
    http://localhost:3000/projets_users/new

    NameError in Projets_users#new

    Showing app/views/projets_users/_form.rhtml where line #6 raised:

    uninitialized class variable @@users in ActionView::Base::CompiledTemplates
    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
    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
    allez hop, auto résolu

    Utiliser une variable globale me permet de le faire sans plus de soucis

    M'enfin, si vous avez d'autres idées plus propres
    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

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 652
    Points
    652
    Par défaut
    Variables globales -> Bof
    La convention Rails, si tu as 2 fois le meme code, c'est d'utiliser les helpers.
    Tu mets ton code dans un helper et tu l'appelles quand t'en as besoin.

  5. #5
    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
    Je te remercie, je n'y avait pas pensé
    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

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Zfred
    Variables globales -> Bof
    La convention Rails, si tu as 2 fois le meme code, c'est d'utiliser les helpers.
    Tu mets ton code dans un helper et tu l'appelles quand t'en as besoin.
    Salut,

    Tu peux illustrer ce que tu dis dans ce cas precis ? je suis aussi un nouveau on Rails

    Pat

  7. #7
    Membre émérite
    Avatar de bolo
    Inscrit en
    Novembre 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 309
    Points : 2 695
    Points
    2 695
    Par défaut
    [QUOTE=titoumimi]Bonjour à tous

    Je suis en train de faire mumuse avec rails, et dans le cadre d'une relation 1-N, pour le moment, je récupére les infos des autres tables comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      def new
        @projets_user = ProjetsUser.new
        @projets = Projet.find_all
        @users = User.find_all
      end
     
      def edit
        @projets_user = ProjetsUser.find(params[:id])
        @projets = Projet.find_all
        @users = User.find_all
      end
    ...
    pourquoi ne pas utiliser before_filter ?

    Ex

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    before_filter : find_users_and_projets
     
    def new
    @projets_user = ProjetsUser.new
    end
     
     def edit
        @projets_user = ProjetsUser.find(params[:id])
     end
     
    protected
    def find_users_and_projets
    @projets = Projet.find_all
        @users = User.find_all
    end

  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
    Heu j'ai sans doutes mal compris la question, mais si le but c'est de récupérer les users associés à un projet par exemple, pourquoi ne pas faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @projet = Projet.find(params[:id])
    @users = @projet.users
    en ayant défini un petit has_many dans le model Projet ? ( ou inversement si tu veux récupérer les projets d'un user... )

  9. #9
    Membre émérite
    Avatar de bolo
    Inscrit en
    Novembre 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 309
    Points : 2 695
    Points
    2 695
    Par défaut
    moi j'avais compris qu'il voulait réduire son code

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    La question c'est comment appeler dans plusieurs actions des donnees de la base (pour generer un tag select dans un formulaire par exemple) mais en gardant son code DRY.

  11. #11
    Membre émérite
    Avatar de bolo
    Inscrit en
    Novembre 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 309
    Points : 2 695
    Points
    2 695
    Par défaut
    Ci c'est cela

    il faut utiliser before_filter

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par bolo
    Ci c'est cela

    il faut utiliser before_filter
    ca me semble aussi une bonne solution.

    Je me demandais juste ce que Zfred voulait dire en parlant de Helpers

  13. #13
    Membre émérite
    Avatar de bolo
    Inscrit en
    Novembre 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 309
    Points : 2 695
    Points
    2 695
    Par défaut
    même question surtt que les helpers c'est pour les vues

  14. #14
    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
    Naon, tu peux utiliser les helpers dans un controller aussi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def MonController
      include MonControllerHelper
    end

  15. #15
    Membre émérite
    Avatar de bolo
    Inscrit en
    Novembre 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 309
    Points : 2 695
    Points
    2 695
    Par défaut
    autant pour moi

  16. #16
    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
    En fait y a même deux façons d'inclure le helper :
    - soit comme plus haut avec "include"
    - soit en utilisant la fonction"helper"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def MonController
      helper :mon_helper
    end
    Par contre je sais pas trop quelle est la différence, a priori la fonction "helper" semble moins brutale, vu qu'elle fait différents test ( selon que tu lui passe un module, un symbole, une string ), mais ensuite elle fait appel à la méthode "add_template_helper" que j'ai pas réussi à trouver sur api.rubyonrails.

    J'vais passer à helper, ça me semble moins bourrin que le "include" quand même.

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

Discussions similaires

  1. Requête spéciale dans le cas d'une relation plusieurs à plusieurs
    Par Chauve souris dans le forum Langage SQL
    Réponses: 5
    Dernier message: 03/05/2013, 21h32
  2. calcul préavis dans le cas d'une période d'essai renouvelée
    Par benlabasse dans le forum Démission
    Réponses: 6
    Dernier message: 22/02/2008, 14h18
  3. cas d'une relation 1,n de chaque coté
    Par Zak Blayde dans le forum Modélisation
    Réponses: 3
    Dernier message: 18/12/2007, 10h51
  4. Réponses: 1
    Dernier message: 23/11/2007, 12h04
  5. [cast] dans le cas d'une Std::list
    Par ZaaN dans le forum SL & STL
    Réponses: 9
    Dernier message: 26/10/2006, 10h07

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