Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

184
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda