Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

180
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!