2011-04-13 7 views
5

J'ai besoin de graver une variable javascript sur le contrôleur. Par exemple, si mon code dans la vue est le suivant -Envoie des variables javascript aux rails?

... <script type="text/javascript"> 
      variable_test = 'hello' 
     </script> 
    ... 

J'ai besoin du contrôleur pour obtenir Variable_Test, comme -

def hello 
@variable_test = #Some code 
# @variable_test => 'hello' 
end 

La vue est bonjour bien sûr, et « Une partie du code » est ce que je ne sais pas faire.

+0

créer champ caché, attribuer à la valeur de ce champ votre js variable, publiez ce hidden_field avec ajax. –

Répondre

3

Vous ne pouvez pas envoyez le code du côté client au contrôleur à moins que vous n'obteniez un get ou un post de quelque sorte. Essayez d'utiliser le post de jQuery ou obtenez des méthodes. Si vous ne l'utilisez jQuery, vous pouvez faire quelque chose comme ceci:

var variable_test = 'hello'; 
var el = document.createElement('script'); 
el.setAttribute('src', 'path_to_controller' + '?variable_test=' + variable_test); 
document.body.appendChild(el); 

alors dans votre contrôleur que vous feriez:

@varliable_test = params[:varliable_test] 

La syntaxe peut être un peu loin, mais vous obtenez le général idée.

+0

Résolu avec la requête jQuery ajax. Merci :) – Ariel

1

Tout d'abord, vous devez appeler le contrôleur en quelque sorte. Soit les données sont dans un formulaire et vous soumettez le formulaire, soit vous effectuez un appel AJAX à partir de javascript. Dans le premier cas, vous voudriez utiliser javascript pour ajouter une entrée cachée au formulaire avec le nom et la valeur que vous voulez. Dans le second cas, les données que vous envoyez avec votre requête AJAX devront inclure la paire nom-valeur que vous voulez. Je ne peux pas être plus précis sans en savoir plus sur ce que vous faites; Soumettez-vous un formulaire ou utilisez-vous AJAX? Si vous utilisez AJAX, utilisez-vous une bibliothèque javascript ou utilisez-vous l'un des assistants Rails intégrés pour ajax (par exemple, remote_function).

Quoi qu'il en soit, vous voulez terminer par une requête qui inclut la paire nom-valeur "varliable_test = hello". Alors vous faites juste

@varliable_test = params[:varliable_test] 

pour accéder à la valeur dans votre contrôleur.

(je dois noter, aussi, que sans doute vous dire « variable », et non « varliable », mais de toute évidence qui ne touche pas la fonctionnalité tant que vous êtes cohérent.)

+0

Je voulais dire "variable" et non "variable". Désolé pour les fautes d'orthographe, je ne suis pas un locuteur natif anglais. – Ariel

0

Je cherchais aussi une réponse à cette question. Dans l'une de mes applications, je dois saisir des données à partir de Google Autocomplete Google Adresses. Cette approche ressemble à une solution parfaite pour moi (crédit Thaha kp: How to pass a javascript variable into a erb code in a js view?)

Vue:

<script type="text/javascript"> 
    var variable_test = 'hello'; 
    $(document).ready(function() { 
    $('#model_variable_test').val(variable_test); 
    }); 
</script> 

... 

<%= form_for :model do |f| %> 
    ... 
    <%= f.hidden_field :variable_test %> 
    ... 
<% end %> 

Controller:

def hello 
    @variable_test = params[:model][:variable_test] 
end 
Questions connexes