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 Discussion :

Sessions avec Ruby on Rails


Sujet :

Ruby

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 42
    Points : 17
    Points
    17
    Par défaut Sessions avec Ruby on Rails
    Bonjour,

    J'ai une application RoR qui gère des informations sur des personnes. Ainsi ces personnes eux même et d'autres personnes (par exemple des administrateurs) pourront se connecter et consulter ces dossiers(ensembles de fiche d'informations avec pour chaque fiche correspond une table dans ma base de données).

    Je voudrais donc pouvoir afficher à chaque fois l'utilisateur connecté, mais aussi les nom et prénom (par exemple) du dossier(fiche) courant ouvert que l'utilisateur est entrain de consulter/modifier ainsi que son mode d'ouverture (c'est à dire : en lecture ou en modification).

    Pour obtenir ces informations comment dois-je procéder?
    Est-ce qu'il faut que j'utilise les sessions ou cookies? Si oui comment?
    Car j'ai du mal à comprendre comment mettre en place le mécanisme de session en RoR.

    Comme par exemple si j'ai nom et prénom dans un formulaire pour l'action new ou édit du controller Contact: comment pourrais-je récupérer "nom" et "prénom" et l'afficher à partir de la page principale de mon application avec les sessions... Si la solution est l'utilisation des sessions.

    Merci de votre aide.

  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
    Je voudrais donc pouvoir afficher à chaque fois l'utilisateur connecté
    Ca dépend du systeme d'authentification que tu as mis en place.
    En général, il y a l'id du current_user qui est stocké dans une session, et à chaque page, Ror requete la bdd pour récupérer le nom, le prénom etc...
    Tu affiche l'utilisateur connecté dans le layout, pour éviter de réécrire le code dans toutes les vues.

    mais aussi les nom et prénom (par exemple) du dossier(fiche) courant ouvert que l'utilisateur est entrain de consulter/modifier
    L'action commence par @contact = Contact.find(:id)
    Donc le contact en cours est en mémoire.
    Il suffit de l'afficher dans la vue...
    <%= @contact.nom %>
    <%= @contact.prenom %>...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 42
    Points : 17
    Points
    17
    Par défaut
    Bonjour,
    Merci pour ton aide.
    J'arrive à récupérer le contact avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <% id = params[:id] %>
    <% @contact = Contact.find(:id) %>
    J'ai ajouté la 1ere ligne car j'avais une erreur du genre "Could'nt find contact with ID =id.

    Mais le problème est que cela ne marche que lorsque je suis sur la page par exemple avec 8 qui est l'id du contact en cours d'édition.

    Maintenant comment dois-je faire si je veux connaitre et récupérer le controlleur "contacts", l'id "8" et l'action "edit" pour pouvoir récupérer le bon id.

    Car si la page courante est il faudrait que je puisse savoir que ce n'est plus le contact qui est en cours d'édition mais le commentaire 4.

    Je sais pas s'il ya un moyen de faire ça avec Ruby on rails seulement ? ou avec des expression régulières?

    Merci de m'éclairer sur cette question.

  4. #4
    Membre actif Avatar de rivsc
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 213
    Points : 275
    Points
    275
    Par défaut
    <% id = params[:id] %>
    <% @contact = Contact.find(:id) %>
    :id est un symbole id est une variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <% id = params[:id] %>
    <% @contact = Contact.find(id) %>

    il faudrait que je puisse savoir que ce n'est plus le contact qui est en cours d'édition mais le commentaire 4.

    Je sais pas s'il ya un moyen de faire ça avec Ruby on rails seulement ? ou avec des expression régulières?
    Les routes sont faites pour ça (config/routes.rb) : lis le fichier routes.rb (les commentaires en anglais...)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 42
    Points : 17
    Points
    17
    Par défaut
    Bonjour,

    Citation Envoyé par rivsc Voir le message
    :id est un symbole id est une variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <% id = params[:id] %>
    <% @contact = Contact.find(id) %>



    Les routes sont faites pour ça (config/routes.rb) : lis le fichier routes.rb (les commentaires en anglais...)
    Merci beaucoup pour cette réponse car cela m'a permis de comprendre de nouvelles choses.

    Mais je ne comprends toujours pas comment m'en servir dans mon application, car les routes que j'avais dans "Config/routes.rb" étaient remplies automatique.

    Peux-tu m'expliquer d'avantage comment assigner correctement les routes et comment s'en servir dans l'appli.

    Par exemple si j'ai la relation: une Personne à 1 ou plusieurs Contacts.
    Est-ce qu'on doit obligatoirement avoir dans le fichier de config/routes.rb une ligne du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    map.resource :personnes, has_many => :contacts
    ou
    map.resource :personnes

    Merci encore.

  6. #6
    Membre actif Avatar de rivsc
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 213
    Points : 275
    Points
    275
    Par défaut
    Je n'ai pas le temps là. Mais je pense qu'il serait formateur que tu regardes les railscast : le numéro 1 => http://railscasts.com/episodes/1-cac...ance-variables, puis les autres on apprend beaucoup de choses. Sinon tu viens de quel language ? php ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 42
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par rivsc Voir le message
    Je n'ai pas le temps là. Mais je pense qu'il serait formateur que tu regardes les railscast : le numéro 1 => http://railscasts.com/episodes/1-cac...ance-variables, puis les autres on apprend beaucoup de choses. Sinon tu viens de quel language ? php ?
    Ok merci, je vais regarder ça plus en détails.
    Je viens du Java.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 42
    Points : 17
    Points
    17
    Par défaut
    Je reviens vers vous pour un problème que j'essaie de résoudre depuis un moment, mais ça ne marche toujours pas.

    J'ai table Personne et une table Contact.
    Je voudrais ajouter dans un même formulaire ou des formulaires séparés mais sur la même page, la possibilité aux Personnes d'ajouter des Contacts. Ces contacts seront ainsi ajoutés à travers la table Personne_Contact qui est la table d'association entre personne et contact, et qui contient la date.

    Voila ce que j'ai fait, et à chaque fois que je clique sur le bouton enregistrer il me crée une ligne dans Personne_Contact avec l'id de la personne mais il n'ajoute pas les informations se trouvant dans le formulaire:

    Voila le partial "_form_personneContact" permettant d'ajouter des contact à partir de la page d'édition d'une personne:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    @contacts = Contact.find(:all)
    <%= form_remote_tag( :url => {:action => 'ajout_contact', :id => @personne } ) %>
        <table>
    	<tr>
    	    <td><%= label_for ="Contact" %></td>
    	    <td>
    		<select name="personneContact[contact_id]">
    			<% @contacts.each do |c| %>
    			<option value="<%= c.id %>">
    			    <%=h Contact.find(c.id).nom%> 
                                <%=h Contact.find(c.id).prenom%> 
    		        </option>
    			<% end %>
    		</select>
    	     </td>
    	 </tr>
     
    	<tr>
    	   <td><%= label_for ="Date" %><br /></td>
    	   <td><%= date_select('personneContacts', 'date',
    			:end_year => Date.current.year,
    			:include_blank => true,
    			:order => [:day, :month, :year])%>
               </td>
    	</tr>
       </table>
     
       <%= submit_tag 'Enregistrer' %>
    <%$end%>

    Et dans personnes_controller j'ai la méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    def ajout_contact
         @personne = Personne.find(params[:id])
        @personneContact = @personne.personneContacts.create()
     end
    Et dans la vue édit de la personne j'ai cette ligne après le formulaire d'édition de la personne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <div >
    	<%= render :partial => 'form_personneContact' %>
    </div>
    Merci de votre aide pour me dire ce qui cloque
    Oubien s'il ya une autre manière de faire ce que je veux faire avec les association plusieurs à plusieurs , et un à plusieurs.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 15
    Points : 16
    Points
    16
    Par défaut PHP ça colle à la peau
    Quand on commence à lire ton code, on vois bien que tu viens du monde de PHP ( ce n'est pas une critiques, c'est une simple remarque)
    Avec RoR, les vues sont dédiées à afficher un résultat et non à effectuer des opérations et des requêtes.

    Il faut comprendre que : @contacts = Contact.find(:all) place un tableaux haché de toutes les données concernant la table Contact dans l'instance @contacts et qu'il est recommandé de placer cette opération dans le controlleur et non dans la vue.

    Donc ca ne sert à rien de placer deux nouvelles requetes pour remplir ton tableaux d'option Select.

    il suffit de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <select name="personneContact[contact_id]">
    			<% @contacts.each do |c| %>
    			<option value="<%= c.id %>">
    			    <%=h c.nom%> 
                                <%=h c.prenom%> 
    		        </option>
    			<% end %>
    </select>
    Ce que je ne comprends pas , c'est que tu l'as déja utilisé pour c.id dans la 3eme ligne de code

    Mais comme tu viens de chez PHP (encore en supposition, et non une critique), sous Rails on ne mélange pas trop les balises HTML avec du Ruby.

    voici une alternative à ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <%= f.select :contact_id , @contact.map { |c| [c.nom, c.id]}, :required => true, :label => "options", :help => "Selectionner un Contact" %>
    Tu vas me poser la question c'est quoi le "f" de f.select, je vais te répondre : je te conseilles d'aller réviser la mise en place de formulaire sous RoR.

    Si jamais t'as des opérations au niveau de la table à effectuer lors d'un enregistrement ou d'une mise à jour, il est préférable d'utiliser le "before_save" ou "before_create" dans le modèle en y rajoutant un appel à une méthode qui se trouve elle aussi dans le même modèle concerné.

    Il faut vraiment oublier la philosophie de PHP où tout se mélange: logique, code, template, vues....

Discussions similaires

  1. Commencer avec Ruby on Rails
    Par vdubois dans le forum Ruby on Rails
    Réponses: 4
    Dernier message: 27/10/2013, 17h23
  2. sms avec ruby on rails
    Par ndeyemaroc dans le forum Ruby on Rails
    Réponses: 4
    Dernier message: 26/10/2010, 22h40
  3. Ruby on Rails et Routes avec 2 tables reliées
    Par Miles Raymond dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 17/06/2009, 08h14
  4. probleme avec postgresql et ruby on rails
    Par rail99 dans le forum Ruby on Rails
    Réponses: 0
    Dernier message: 08/05/2008, 02h01

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