Debido a que su código Javascript se coloca en un archivo incrustado rubí (.erb) que está siendo interpretado por el servidor antes de ser enviado al navegador del cliente, puede generada la variable JS requerida con un fragmento de rubí como:
var id='#id_for_'+<%= @user.username %>
var id='#comment_info_'+<%= n %>
y luego usarlo simplemente como $(id).doSomethingReallyCool();
.
Si necesita controlar el valor del identificador generado por la forma en primera instancia, se puede hacer pasar el id en las opciones de hash html:
f.text_field :username, id:"id_for_#{…}"
Si estás utilizando un JS discreta Enfoque, le gustaría colocar el código JS en un parcial (.js.erb) y hacer que el controlador lo use si el cliente usuario permite JS. P.ej.:
class FooController < ApplicationController
def foo_doo
… # some logic
respond_to do |format|
format.js # this will render javascript in file “foo_doo.js.erb” if allowed
format.html { … } # html fallback for unobtrusive javascript
end
end
Este es el enfoque recomendado hoy en día. El problema ahora es que necesita pasar las variables a su código JS. Si estas variables provienen de un formulario, colóquelas en campos de formulario ocultos oportunos. Y luego usar el de hacer que locals
opción de tener a disposición por su parcial, como en:
format.js { render 'foo_doo', locals: {n:n} }
Si el código JS es la actualización de una plantilla que utilice algunas variables, utilizar el mismo enfoque:
var id='#comment_info_'+<%= n %>
$(id).replaceWith("<%= j (render partial:…, locals: {…}) %>")
Me gustaría señalar que el ejemplo adicional en la recompensa es solo otro caso particular en el que la respuesta será útil. No es una pregunta diferente. Para ser aceptable, la respuesta debería ser un propósito general suficiente para ajustarse tanto al ejemplo original como al mío. Ambos ejemplos muestran un caso en el que es necesario "obtener el ID generado de Ruby on Rails de un elemento de formulario para referencia en JavaScript". –
Meta pregunta sobre la recompensa actual https://meta.stackoverflow.com/q/351561/73226 –
@ClaudioFloreani No, eso no está bien. Tenga en cuenta que el texto de su recompensa ya no es visible después de que la recompensa expira o se otorga. Una respuesta que aborde la pregunta en tu generosidad tendrá muy poco sentido después de que la recompensa haya desaparecido. Por favor haga una nueva pregunta. – duskwuff