Comment utiliser les variables javascript en ruby

Je suis nouveau dans les rails et je veux utiliser une variable javascript dans le code intégré Ruby pour faire une requête dans la base de données,

C'est mon code

function modify(){ var select = document.getElementById("special_id").value; var select2 = document.getElementById("target_area_id"); select2.options.length = 1; <% @values = TargetArea.where(:special_id => select) %> select2.options[select2.options.length] = new Option(<%= @values.count %>,"1"); } 

Je veux comparer la valeur obtenue de ma sélection avec l'identifiant d'un champ.

Pourriez-vous me dire comment puis-je faire cela à Ruby? Merci

Une méthode qui est probablement la plus simple que je connaisse, et une façon conventionnelle de gérer cette procédure, est d'effectuer une requête Ajax. JavaScript est côté client et Ruby est habituellement côté serveur.

Vous pouvez créer un itinéraire dans votre fichier de routes, puis, dans le contrôleur correspondant, créer l'action qui répond avec JavaScript au lieu de HTML. Dans ce fichier JavaScript, vous pouvez modifier ou modifier des éléments sur la page et avoir accès à la variable que vous avez modifiée, renvoyer des parties de la page, etc. Je vais utiliser jQuery ici, parce que c'est un peu plus propre.

Dans votre fichier d'itinéraires:

 post 'some_controller/make_a_change', to: 'some_controller#make_a_change' 

Ensuite, dans la fonction que vous avez définie ci-dessus:

 $.ajax({ url:'/some_controller/make_a_change', //Defined in your routes file data:( 'special_id=' + $('#special_id').val() + '&' + 'target_area_id=' + $('#target_area_id').val() ) }) 

Dans SomeController.rb, vous pouvez accéder à vos valeurs JavaScript via params :

 def make_a_change some_special_id = params[:special_id] taid = params[:target_area_id] @values = TargetArea.where(:special_id => some_special_id) respond_to do |format| format.js { render 'make_a_change' } #make_a_change.js.erb end end 

Ensuite, je pense que vous pouvez simplement faire le reste dans votre make_a_change.js.erb, qui fonctionnera chaque fois que vous appelez cette autre fonction et que votre demande Ajax est réussie.

 var select2 = document.getElementById("target_area_id"); select2.options.length = 1; select2.options[select2.options.length] = new Option(<%= @values.count %>,"1"); 

Ajustez cela à vos besoins. J'espère que cela t'aides!


METTRE À JOUR:

Je viens de réaliser cette ligne:

 select2.options[select2.options.length] = new Option(<%= @values.count %>,"1"); 

Pourrait ne pas fonctionner. S'il s'agit d'une boîte de sélection HTML ou quelque chose de similaire, vous pouvez la mettre dans sa propre vue et la redistribuer dans make_a_change.js.erb dans l'endroit approprié.

Ainsi:

  $('#some_div').html('<%= j render 'select2_list', values:@values %>') 

La plupart du temps, le thème derrière ma réponse est le suivant: si vous souhaitez interagir avec votre code Ruby ou les données du serveur à partir d'une fonction JavaScript, qui est une fonction appelée lorsque vous cliquez sur un bouton ou une case ou quelque chose dans ce sens, vous aurez Envoyer une requête Ajax à votre serveur et gérer la demande dans vos contrôleurs. Cela vous rapprochera plus tard de Rails et d'essayer de lier deux variables de langue différentes avec un signe = .

Étant donné que Ruby est une langue basée sur le serveur comme php ou asp / asp.net, l'utilisation du code du serveur dans la page est très simple, comme l'impression, donc si vous souhaitez modifier une variable javascript à l'aide des valeurs côté serveur, c'est facile. Cependant, faire le contraire est une chose différente. J'envoyais ces valeurs au serveur à l'aide d'un appel proxy (jQuery probablement). La solution que vous demandez pour l'utilisation d'un framework javascript comme jQuery, pas les rails que je connais.

Essayez d'utiliser un proxy jjuery ajax et des données de rafraîchissement dans le client en fonction de la réponse du serveur, ce qui fera l'affaire.

Vérifiez http://www.jquery.com , utilisez des rails pour créer des services qui répondront avec JSon à vos requêtes.

J'espère que cela vous aidera.