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 :

Select_tag from JSON [Débutant(e)]


Sujet :

Ruby

  1. #1
    Membre actif Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Points : 269
    Points
    269
    Par défaut Select_tag from JSON
    Bonjour a tous,

    Tout d'abord, je tiens à vous préciser que je suis vraiment débutant en Ruby & Rails, et que je devrait passer une formation très bientot pour avoir un peu plus les bases.
    Néanmoins, je commence déjà a me pencher sur le sujet, et je ne commence pas par le plus simple je pense...
    Je vous explique mon probleme. j'ai créé un controller que j'ai appeler mytest.
    Dans la partie controler, je me connecter à un WebService comme ceci :
    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
    require 'json'
     
    class MytestController < ApplicationController
    	def index
      	 	uri = URI.parse("https://mywebsite/api/organizations")
    				Net::HTTP.start(uri.host, uri.port,
    	  	:use_ssl => uri.scheme == 'https', 
    	  	:verify_mode => OpenSSL::SSL::VERIFY_NONE) do |http|
     
    	  	request = Net::HTTP::Get.new uri.request_uri	
    	  	request.basic_auth 'myuser', 'myaccount'
    	  	request.add_field('Accept','application/vnd.monsoon.v1+json')
    		request.add_field('Content-Type','application/json')
    		response = http.request request # Net::HTTPResponse object
    	  	@message = JSON.parse(response.body)	
    	end
    end
    end
    Si dans ma view j'affiche @message, je recois le JSON suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [{"uri"=>"/organizations/MyUser", "id"=>176, "name"=>"MyUser", "description"=>"Emmanuel's Sandbox", "is_sandbox"=>true, "cost_object"=>"1111111111"}, {"uri"=>"/organizations/demo_rv", "id"=>304, "name"=>"demo_rv", "description"=>"by RV", "is_sandbox"=>false, "cost_object"=>"1111111111"}, {"uri"=>"/organizations/test_ui", "id"=>3501, "name"=>"test_ui", "description"=>"", "is_sandbox"=>false, "cost_object"=>"123313123"}, {"uri"=>"/organizations/test_ui2", "id"=>3502, "name"=>"test_ui2", "description"=>"", "is_sandbox"=>false, "cost_object"=>"132132132"}]
    Mon but est maintenant de créer un liste déroulante (select_tag) qui afficherais la propriété "name" et aurait comme valeur "id" par exemple.

    Mais je seche complement. Je suppose qu'il doit falloir utiliser options_from_collection_for_select mais ... avec quels paramètres, la est la question.

    Merci d'avance de votre aide.

    Cordialement

    DeWaRs

  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
    Bonjour,
    regardons les paramètres d'options_from_collection_for_select : une collection ActiveRecord, une méthode de valeur (identifiant le plus souvent), une méthode d'affichage (on va dire nom, prénom, référence ou autre).

    Tu n'as pas de collection ActiveRecord mais si tu sais qu'il faut utiliser ce code, tu peux regarder le code source !
    https://github.com/rails/rails/blob/...helper.rb#L395

    Malheureusement ça ne t'aide pas beaucoup, ça "prépare des trucs" mais ça finit par appeler... options_for_select. Recommençons :
    http://api.rubyonrails.org/classes/A...ons_for_select

    Et là c'est ce que tu veux ! Il prend une collection (hash ou array) et tu as une hash sortie de ton JSON, et l'élément sélectionné s'il y en a un.
    Je te laisse regarder les exemples et adapter ton code.

    À bientôt,

  3. #3
    Membre actif Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Points : 269
    Points
    269
    Par défaut
    Merci de ta réponse. Si je comprends bien, il faut que je reformate mon JSON avec seulement deux éléments (valeur et valeur afficher), R&R n'est pas capable de comprendre quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    options_for_select(JSON_String, Valeur, Affiché)
    qui automatiquement me filtrerais mon JSON ?

    Cordialement

    DeWaRs

  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
    Hello,
    si tu as un JSON qui te sort un tableau de hash comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    depts = [{id:1, num:75, nom:"Ile de France"},{id:2, num:94, nom:"Val de Marne"}],
    Il faut que tu donnes à options_for_select un ID et une valeur, et là c'est bête car tu as trop de champs (3),
    faisons donc un grand tableau des départements, et chaque tableau est une paire valeur,nom :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabtab = depts.map{|dept| [dept[:nom], dept[:id]] }
    La valeur de l'élément choisi, c'est l'ID. En supposant que ce soit l'île de France, ça sera 1

    Ensuite ce tableau de tableau passe sur options_for_select:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    options_for_select(tabtab, 1) # en supposant  l'ID 1

    MAIS si tu sortais ça d'une liste d'ActiveRecords (classe Departement, champs id, nom, num) tu pourrais faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    idf = Departement.find(1)
    options_from_collection_for_select(Departement.all, :id, :nom, idf)
    Il saura alors que ta liste de Departement ce sont des objets, avec :id la méthode qui sert de valeur, :nom qui sert d'affichage, et l'objet idf qui est celui qui a l'ID numéro 1.

    Mais comme dans ton JSON tu n'as pas de "raccourci" avec une méthode qui dit .nom ou .id, tu dois donc utiliser l'autre.

Discussions similaires

  1. jSon from PHP
    Par agencep dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 30/06/2013, 10h14
  2. JSON from PHP to Silverlight problème avec les BackSlash's
    Par s.toubal dans le forum Silverlight
    Réponses: 4
    Dernier message: 16/02/2012, 14h43
  3. SYBASE SELECT imbriqué clause FROM
    Par Nicolas Martel dans le forum Sybase
    Réponses: 2
    Dernier message: 19/11/2003, 15h28
  4. Automatiser la mise à jour de la bD SQL SERVER from Access
    Par Nadaa dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/11/2003, 15h23
  5. equivalent de select nextval from dual en SQL-Server ?
    Par toze dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/10/2003, 09h17

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