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 :

Récupérer variable Javascript dans Rails view


Sujet :

Ruby on Rails

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2012
    Messages : 24
    Points : 24
    Points
    24
    Par défaut Récupérer variable Javascript dans Rails view
    Salut à tous, je suis encore avec mon app de gestion de tickets d'incidents et j'ai besoin de faire passer la valeur d'une variable dans Rails pour ensuite l'analyser dans la vue avec un IF.

    Voici la vue :
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <%= form_for(@incident) do |f| %>
      <% if @incident.errors.any? %>
        <div id="error_explanation">
          <h2><%= pluralize(@incident.errors.count, "error") %> prohibited this incident from being saved:</h2>
     
          <ul>
          <% @incident.errors.full_messages.each do |message| %>
            <li><%= message %></li>
          <% end %>
          </ul>
        </div>
      <% end %>
     
      <div class="field">
        <%= f.label "Titre" %><br>
        <%= f.text_field :title %>
      </div>
      <div class="field">
        <%= f.label "Contenu" %><br>
        <%= f.text_field :content %>
      </div>
      <div class="field" style="display: none;">
        <%= f.label "Nom d'utilisateur" %><br>
        <%= select_tag("incident[user_id]", options_for_select(User.find_by_sql("SELECT `users`.* FROM `users` WHERE `id` = #{current_user.id}").collect{ |u| [u.name, u.id]})) %>
      </div>
      <div class="field">
        <%= f.label "Catégorie de l'incident" %><br>
        <%= cat_select = select_tag("incident[category_id]", options_for_select(@categori = Category.find_by_sql("SELECT `categories`.* FROM `categories`").collect{ |u| [u.name, u.id]}), :onchange =>"recupere_valeur(); parent.location='javascript:location.reload();'")%>
      </div>
      <div class="field">
        <%= f.label "Sous_Catégorie de l'incident" %><br>
        <%= cat_select = select_tag("incident[sous_category_id]", options_for_select(SousCategory.find_by_sql("SELECT `sous_categories`.* FROM `sous_categories` ").collect{ |u| [u.name, u.id]}))%>
      </div>
      <div class="field" style="display: none;">
        <%= f.label "Type de l'évenement"%>
        <%= f.number_field :evenement_type_id, :value => 1 %>
      </div>
      <div class="actions">
        <%= f.submit %>
      </div>
    <% end %>
    Et mon script Rails pour récupérer la valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <script>
    function recupere_valeur() {
    select = document.getElementById("incident_category_id");
    choice = select.selectedIndex;  // Récupération de l'index du <option> choisi
     
    valeur_cherchee = select.options[choice].value;
    alert(valeur_cherchee);}
     // Récupération du texte du <option> d'index "choice"
    </script>
    <% @param = capture do %>
       <%= javascript_tag "document.write(getParameter(valeur_cherchee));" %>
    <% end %>
    <%= @param.inspect%>
    Et donc quand je fais le @param.inspect il ne m'affiche rien... Comment je peux la faire passer ?Merci !

  2. #2
    Membre actif
    Profil pro
    Problem Solver
    Inscrit en
    Juin 2013
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Problem Solver

    Informations forums :
    Inscription : Juin 2013
    Messages : 138
    Points : 231
    Points
    231
    Par défaut Web
    Salut,
    je ne comprends pas trop ton approche.
    Ton script fait... je ne sais pas ce qu'il fait en fait. À cette étape-là Rails a fini son job.

    Tu as un formulaire avec form_for, mais tu n'en fais rien. C'est dommage.
    Sans script, tu peux simplement laisser ce fonctionnement, faire un bouton submit, et du coup ça fait une 2e requête à ton appli Rails.
    C'est d'autant plus étrange de ne pas faire ça car tu sembles forcer un rechargement de la page en Javascript.
    Là tu perds tes données, c'est un peu étrange alors que le formulaire de base suffisait (ou les ajouter en params de l'URL).

    Si tu as un name="incident[category_id]" ça se range dans params[:incident][:category_id]
    (tu peux vouloir faire un truc pour éviter les nil, genre try ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    category = params[:incident] ? params[:incident][:category_id] : nil
    )

    Bref, fais du "low-tech", respecte les standards qui ont 20 ans, et ça se passera bien plus simplement qu'en ajoutant pansement sur pansement
    ++

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2012
    Messages : 24
    Points : 24
    Points
    24
    Par défaut
    Salut abelar_s !

    Merci d'avoir répondu !
    Je t'explique ce que je voudrais faire:

    Je dispose de deux champs actuellement : Catégories et sous catégories.

    Je voudrais que le champ sous catégorie apparaisse uniquement lorsque l'utilisateur choisit une catégorie et donc qu'il m'affiche les sous catégories correspondantes.
    En gros il me faut juste récupérer la valeur de la catégorie sélectionnée (son identifiant) et récupérer dans ma table sous_categories, celles qui correspondent.

    Mais je viens de penser, je pourrais pas faire ça :

    Créer une variable (var) qui vaut par défaut 0 mais que lorsque le select change de valeur, donc un :onchange qui reload la page. Ensuite ma variable (var) stocke la valeur selected du select et à ce moment là je crée le second select sous categorie... Non ?

  4. #4
    Membre actif
    Profil pro
    Problem Solver
    Inscrit en
    Juin 2013
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Problem Solver

    Informations forums :
    Inscription : Juin 2013
    Messages : 138
    Points : 231
    Points
    231
    Par défaut
    > Je voudrais que le champ sous catégorie apparaisse uniquement lorsque l'utilisateur choisit une catégorie
    > et donc qu'il m'affiche les sous catégories correspondantes.

    Personnellement dans tous les projets que j'ai fait c'est une ergo dangereuse.
    Supposons :
    - catégorie X, sous-catégories 1,2,3
    - catégorie Y, sous-catégories a,b,c

    Je clique X puis 3. Je mets Y et je sauve -> erreur, choix de a, de c, de vide ou de 3 ?
    Je mets X puis 3. Je mets Y puis b, et je remets X -> on sélectionne de base sur rien, 1, 3 ?

    Bref presque personne n'aime ça, ou alors tu reçois trop de support de gens qui comprennent pas.


    > En gros il me faut juste récupérer la valeur de la catégorie sélectionnée (son identifiant)
    > et récupérer dans ma table sous_categories, celles qui correspondent.

    Il y a des plugins jQuery ou des gems Rails qui doivent faire ça.
    Sinon un truc que j'aime bien c'est que tu fais ton bout de code Ruby pour "aplatir" les options et ça donnerait dans mon cas 6 choix :
    X 1
    X 2
    X 3
    Y a
    Y b
    Y c

    > Mais je viens de penser, je pourrais pas faire ça :
    > Créer une variable (var) qui vaut par défaut 0 mais que lorsque le select change de valeur, donc un :onchange qui reload la page.
    Reloader la page c'est horrible, c'est juste un select avec des options et un attribut selected, fais un hidden si tu veux mais là c'est moche.

    > Ensuite ma variable (var) stocke la valeur selected du select et à ce moment là je crée le second select sous categorie... Non ?
    C'est pareil, tu t'embêtes pour rien et la perf en souffrirait probablement : prends le même select et fais du CSS ou autre pour cacher des options.

    Perso je traite plutôt avec des milliers de trucs donc des autocompletes comme chosen sont super pour ça.

    ++

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2012
    Messages : 24
    Points : 24
    Points
    24
    Par défaut
    Le fait est que j'ai vraiment besoin de faire un select avec mes catégories et un second select qui apparrait selon la catégorie sélèctionnée. Comment je peux réaliser ça ?

Discussions similaires

  1. Récupérer variable Javascript dans PHP
    Par smotte761 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 01/08/2011, 16h48
  2. récupérer variable javascript dans code behind
    Par rom117 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 16/07/2010, 17h21
  3. Réponses: 2
    Dernier message: 05/05/2007, 23h11
  4. Réponses: 17
    Dernier message: 06/09/2006, 13h37
  5. récupérer une variable javascript dans une variable java
    Par tx dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/07/2006, 17h55

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