Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

183
Vistas
Por qué los controladores necesitan variables de instancia para usar ajax

En el capítulo 12.2.5 del tutorial de Rails, se introduce Ajax para "enviar solicitudes de forma asíncrona al servidor sin salir de la página". Luego, el método respond_to se usa en el controlador para permitir que los navegadores con javascript habilitado usen Ajax o respondan con una redirección en caso de que Ajax esté deshabilitado.

El formulario utilizado para crear una relación entre dos usuarios es:

 <%= form_for(current_user.active_relationships.build, remote: true) do |f| %> <div><%= hidden_field_tag :followed_id, @user.id %></div> <%= f.submit "Follow", class: "btn btn-primary" %> <% end %>

La acción correspondiente en el controlador de relaciones es:

 def create @user = User.find(params[:followed_id]) current_user.follow(@user) respond_to do |format| format.html { redirect_to @user } format.js end end

Lo que le da a Rails la oportunidad de usar Ajax es la adición de remote: true en el método auxiliar form_for . De acuerdo con el tutorial, es necesario que el controlador use la variable de instancia @user en lugar de la variable local user para usar en el formulario con remote: true .

Sin Ajax, el formulario resultante sería idéntico excepto por el remote: true , y en el controlador, la sección de código respond_to sería reemplazada por redirect_to; además, la variable de instancia @user puede ser reemplazada por la variable local user , por lo que la acción de creación sería:

 def create user = User.find(params[:followed_id]) current_user.follow(user) redirect_to user end

Me pregunto: ¿por qué es necesario que el controlador use la variable de instancia @user en lugar de la variable local user para usar Ajax? Traté de usar la variable local y, en efecto, se requiere una actualización para ver cualquier cambio. La variable @user en el formulario, que se usa en @user.id , se define en la acción show para el controlador de usuarios, porque el parcial del formulario en sí se inserta en el archivo show.html.erb . Entonces, según tengo entendido, no hay conexión entre @user en el controlador de usuarios y @user en el controlador de relaciones.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Debe declararlo como variable de instancia (@) para que esté disponible en su vista. Sí, al usar ajax no está recargando la página, pero está enviando js en lugar de html. Rails responderá con lo que esté en create.js.erb . Tenga en cuenta que en este archivo necesita acceso a los datos de @usuario; si lo declara como user en lugar de @user , no será accesible:

 #app/views/relationships/create.js.erb $("#follow_form").html("<%= escape_javascript(render('users/unfollow')) %>"); $("#followers").html('<%= @user.followers.count %>');
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda