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 :

afficher la valeur d'une clé étrangère plutot que le nom


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 afficher la valeur d'une clé étrangère plutot que le nom
    re-bonjour.

    En continuant de faire joujou avec rails, je me retrouve confronté à un micro problème :

    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
    16
    17
    <h1>Listing des taches par utilisateur</h1>
     
    <table border="1">
      <tr>
      <% for column in ProjetsUser.columns %>
        <th><%= column.human_name %></th>
      <% end %>
      </tr>
     
    <% for projets_user in @projets_users %>
      <tr>
      <% for column in ProjetsUser.columns %>
        <td><%=h projets_user.send(column.name) %></td>
      <% end %>
      </tr>
    <% end %>
    </table>
    et mes tables :

    projets
    id
    nom

    users
    id
    nom

    projets_users
    id
    projet_id
    user_id
    date_tache
    duree
    il m'affiche bien les infos, mais il m'affiche les id des clés étrangères alors que je préférerai l'intitulé. Je pourrai bien sûr le faire à la main colonne par colonne (ou en générant moi-même la requête SQL), mais est-ce qu'il n'y a pas une méthode magique qui permettrai de faire l'association SVP ?

    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
    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
    Le scaffold ça aide bien mais voila, ça ne fait pas tout, loin de là.
    Surtout pour afficher les valeurs qui sont dans une autre table...

    Donc si tu veux une colonne spéciale, il te faut la faire à la main.

    Il faut lui préciser dans le controlleur, ce que tu veux qu'il mette dans ta colonne.
    si tu veux afficher le nom du user, dans le controlleur ProjetsUser tu trouves la méthode "show" et tu dois avoir :
    @projets_user = ProjetsUser.find(params[:id])
    tu lui rajoutes :
    @le_nom = User.find(@projets_user.user_id)

    et dans ta vue tu mets ta colonne sous cette forme :
    <%= @le_nom.nom %>

    Voila c'est tout, mais il faut le faire. Rails ne fait pas tout.
    Tu remarqueras au passage la violence du code SQL qu'il faut écrire pour faire la requete
    -> En fait rien, la méthode find() génère le SQL à ta place

  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
    ok, c'est bien ce qui me semblait, va falloir que j'affiche les colonnes à la main

    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
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    tu peux peut-etre faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%=h projets_user.projet.nom %>

    Mais ça va t'imposer d'éclater ta boucle.

    Sinon ton appli est quelque peu écrit en franglais (projet <> user)... Choisis ton camp camarade !

  5. #5
    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
    <%=h projets_user.projet.nom %>
    ---> Alors ça j'ai essayé mais je n'y suis pas arrivé :-/
    Si ça marche chez quelqu'un je veux bien une confirmation !

    Pour le franglais, c'est un long débat. Il y a plusieurs écoles...
    Ce n'est pas génant (bien au contraire) à condition de s'imposer des conventions.
    Genre ce qui vient de moi en français, ce qui vient d'ailleurs en anglais...
    Par contre si tout est mélangé n'importe comment, c'est clair que c'est bof

  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
    effectivement, c'est pas top

    je cherchait à faire au plus court pour ma table qui gère les associations

    M'enfin, heureusement que ce n'est qu'un projet "jouet", plus pour me permettre de me rendre compte de ce qui est faisable ou non avec Rails qu'un projet à mettre en prod plus tard
    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 Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par Zfred
    <%=h projets_user.projet.nom %>
    ---> Alors ça j'ai essayé mais je n'y suis pas arrivé :-/
    Si ça marche chez quelqu'un je veux bien une confirmation !
    Ca marche !

    Demonstration en meme pas 2 minutes chrono (C'est là qu'on voit la puissance de rails )
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    create database mimi_development;
    create table articles(
       id int(11) not null auto_increment primary key, 
       name varchar(255)
    );
    create table authors(
       id int(11) not null auto_increment primary key, 
       name varchar(255), 
       article_id int(11)
    );

    Code shell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    rails mimi
    cd mimi
    script/generate scaffold Article
    script/generate scaffold Author

    Code ruby : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class Author < ActiveRecord::Base
       belongs_to :article
    end

    Code script/console : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Loading development environment.
    >> un_article = Article.new(:name => 'Ceci est un article')
    => #<Article:0xb73cbc18 @new_record=true, @attributes={"name"=>"Ceci est un article"}>
    >> un_auteur = Author.new(:name => 'John', :article => un_article)
    => #<Author:0xb735f0cc @article=#<Article:0xb73cbc18 @new_record=true, @attributes={"name"=>"Ceci est un article"}>, @new_record=true, @attributes={"name"=>"John", "article_id"=>nil}>
    >> un_auteur.article.name
    => "Ceci est un article"


    Après dans la vue, il n'y a pas de raison que ça change... Si j'édite le code généré :
    Code views/author/list.rhtml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <h1>Listing authors</h1>
    
    <table>
      <tr>
      <% for column in Author.content_columns %>
        <th><%= column.human_name %></th>
      <% end %>
      <th>Article</th>
      </tr>
    
    <% for author in @authors %>
      <tr>
      <% for column in Author.content_columns %>
        <td><%=h author.send(column.name) %></td>
      <% end %>
      <td><%=h author.article.name %></td>
    ...
    re-


  8. #8
    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
    Je confirme Mr N.
    Ca roule et c'est bien mieux que ce que je proposais, vu qu'avec ton exemple, il n'y a pas besoin de modifier le controleur.
    C'est une excellente nouvelle

    ( J'y arrivais pas parceque j'écrivais ma méthode à l'envers²² *autobaffe* )

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/07/2006, 13h41
  2. Réponses: 2
    Dernier message: 17/07/2006, 12h12
  3. comment afficher les valeurs d'une semaine
    Par duck54 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 28/05/2006, 22h57
  4. Afficher première valeur d'une liste modifiable
    Par alexg81 dans le forum Access
    Réponses: 3
    Dernier message: 15/05/2006, 22h02
  5. afficher la valeur d'une variable contenue dans une DB
    Par titoumimi dans le forum Langage
    Réponses: 3
    Dernier message: 28/02/2006, 17h00

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