2011-04-13 9 views
5

Necesito sembrar una variable javascript para el controlador. Por ejemplo, si mi código en la vista es el siguiente -¿Enviar variables de JavaScript a los rieles?

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

necesito el controlador para obtener Variable_Test, como -

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

La vista es hola, por supuesto, y 'Parte del código' es lo que no sé cómo hacer

+0

crear campo oculto, asigne al valor de ese campo su js variable, publica este hidden_field con ajax. –

Respuesta

3

No se puede envíe el código del lado del cliente al controlador a menos que haga un get, o post, de algún tipo. Intenta usar la publicación de jQuery u obtén los métodos. Si no está utilizando jQuery entonces usted puede hacer algo como esto:

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

entonces en su controlador puede hacer:

@varliable_test = params[:varliable_test] 

La sintaxis puede ser un poco, pero en general se obtiene el idea.

+0

Resuelto con la solicitud jQuery ajax. Gracias :) – Ariel

1

Antes que nada, debe llamar al controlador de alguna manera. O los datos están en un formulario y usted envía el formulario, o realiza una llamada AJAX desde javascript. En el primer caso, querrá usar javascript para agregar una entrada oculta al formulario con el nombre y el valor que desee. En el segundo caso, los datos que envíe con su solicitud AJAX necesitarían incluir el par nombre-valor que desea. No puedo ser más específico sin saber más sobre lo que estás haciendo; ¿está enviando un formulario o utilizando AJAX, y si está utilizando AJAX está utilizando una biblioteca de JavaScript o utilizando cualquiera de los ayudantes de Rails incorporados para ajax (por ejemplo, remote_function).

De cualquier forma, sin embargo, desea finalizar con una solicitud que incluya el par nombre-valor "varliable_test = hello". Luego, simplemente haga

@varliable_test = params[:varliable_test] 

para acceder al valor dentro de su controlador.

(tengo que señalar, también, que, presumiblemente, que quiere decir "variable", no "varliable", pero, obviamente, que no afecta a la funcionalidad, siempre y cuando eres consistente.)

+0

Quise decir "variable" y no "variable". Perdón por los errores de ortografía, no soy un hablante nativo de inglés. – Ariel

0

Estaba buscando una respuesta a esta pregunta, también. En una de mis aplicaciones, necesito obtener datos de Autocompletar de Places de Google. Este enfoque parece una solución perfecta para mí (crédito a Thaha kp: How to pass a javascript variable into a erb code in a js view?)

Vista:

<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 %> 

controlador:

def hello 
    @variable_test = params[:model][:variable_test] 
end 
Cuestiones relacionadas