2012-03-16 12 views
8

Si estoy en una vista, ¿cómo puedo acceder al ID del objeto ruby ​​que actualmente representa esa vista?Cómo acceder al identificador de objeto de rieles actual en javascript

E.g. Si estoy en blah.com/jobs/1 ¿cómo obtengo 1?

Pensé en recortar la URL actual, pero parece demasiado frágil, especialmente teniendo en cuenta que tengo recursos anidados. La única otra forma fácil en que puedo pensar es tener un campo oculto, pero me parece tonto tener una entrada oculta en una página de programa donde no hay formularios.

Respuesta

10

Tienes razón en que analizar la URL es una mala idea, es mejor que la proporciones explícitamente en algún lado.

Puede adjuntar un atributo data-job-id a un elemento estándar en el HTML, quizás incluso <body>. A continuación, el JavaScript podría hacer cosas como esta:

var id; 
var $body = $('body'); 
if(id = $body.data('job-id')) 
    // Do some job things. 
else if(id = $body('user-id')) 
    // Do some user things. 

y todavía estaría compatible con HTML5 y no tendría que perder el tiempo con entradas ocultas.

No es necesario que use <body>, por supuesto, su HTML probablemente tiene algún contenedor de nivel superior con un conocido id, por lo que podría usarlo en su lugar.

3

No solo <% = params [: id]%> haz el truco?

+0

'<% = params [: id]%>' hace el truco – Francisco

4

me gustaría sugerir uno de los siguientes:

  1. Como sugirió Jamsi, incluyen <%= params[:id] %> o <%= @job[:id] %> directamente en su javascript:

    var id = <%= @job[:id] %>

  2. Si su Javascript se encuentra en una separada archivo, siga el consejo de Mu. Agregue <%= @job[:id] %> a una de las etiquetas html de su vista y consúltela.

1

Aquí hay un ejemplo completo, que combina las respuestas ya proporcionadas.

Utilizando el elemento de cuerpo params[:id] y, la siguiente declaración en línea producirá un atributo data-params-id, que puede ser utilizado de forma genérica en un archivo de diseño:

<body <%= "data-params-id=#{params[:id]}" if params.has_key?(:id) %> > 

Esto entonces se puede acceder con la siguiente:

JavaScript:

var dataId = document.body.getAttribute('data-params-id'); 

jQuery:

var dataId = $('body').data('params-id'); 
Cuestiones relacionadas