Rails 4 link_to Destruye no funciona en el tutorial de Introducción

Estoy trabajando en el tutorial Getting Started (creación de un blog) y el link_to Destroy no funciona correctamente. En la terminal, siempre lo interpreta como #SHOW.

Al leer problemas similares, he aprendido que el Delete debe convertirse a un POST para que el navegador lo interprete. Esto no parece estar sucediendo.

También me he encontrado con el mismo problema al usar Destroy en el curso Lynda.com Rails, por lo que me hace creer que es algo en mi entorno de desarrollo. Estoy usando Rails 4, Ruby 2.00p274, MySQL, WEBrick para el servidor HTTP en un MacBook Pro Lion.

en la sesión de la terminal cuando se selecciona Destruir:

Started GET "/posts/4" for 127.0.0.1 at 2013-08-09 13:45:20 -0600 Processing by PostsController#show as HTML Parameters: {"id"=>"4"} Post Load (0.6ms) SELECT "posts".* FROM "posts" WHERE "posts"."id" = ? LIMIT 1 [["id", "4"]] Rendered posts/show.html.erb within layouts/application (0.4ms) Completed 200 OK in 13ms (Views: 8.6ms | ActiveRecord: 0.6ms) 

En ports-controller.rb:

 def destroy @post = Post.find(params[:id]) @post.destroy redirect_to action: :index end 

En el index.html.erb:

             

En las rutas.rb

 Blog::Application.routes.draw do resources :posts do resources :comments end root to: 'welcome#index' end 

Prueba esto

 < %= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %> 

Asegúrate de que gem ‘jquery-rails’ esté en gemfile y jquery_ujs esté incluido en el archivo app / assets / javascripts / application.js

 //= require jquery //= require jquery_ujs 

Fuente: https://github.com/rails/jquery-ujs

Tuve el mismo problema, para rails 4.2.X. Comprobé todos mis archivos javascript pero no pude hacerlo funcionar. si observa detenidamente la solicitud del servidor, faltará ‘authenticity_token’ en los parámetros, de modo que el usuario se desconectará. En los rails 4.1 y superiores tienes que usar button_to en lugar de link_to

Resolví el problema simplemente añadiendo assets / javascripts / application.js

 //= require jquery_ujs 

Started GET "/posts/4" for 127.0.0.1 at 2013-08-09 13:45:20 -0600

Este es el problema. El enlace de eliminación utiliza el verbo GET http a pesar de que utilizó el method: delete en su enlace.

Mira el siguiente hilo SO

Asegúrese de tener un método Eliminar REST a través de rutas de rake.

 DELETE /articles/:id(.:format) articles#destroy 

Solo tengo el mismo problema con esta versión de blog ya que estoy haciendo ambas cosas. http://blog.8thcolor.com/en/2011/08/nested-resources-with-independent-views-in-ruby-on-rails/

También estoy tratando de aprender a usar la consola web y curiosear dentro de ella. Mi problema es que binding.pry no aparece en el método destroy pero se mostrará. Eso me dice que debe ser un enlace malo ¿no? No está llegando al método de destrucción, incluso. Gracias a todos por sus respuestas o comentarios. Tenemos que intentar cosas, ¿no? Molesto

 < %= link_to 'Destroy', { action: :destroy, id: post.id }, method: :delete, data: { confirm: 'Are you sure?' } %> 

no va a funcionar para eso.

Esto es lo que tiene

 < %= link_to 'Destroy', [comment.post, comment], :confirm => 'Are you sure?', :method => :delete %> 

porque solo quieres borrar el comentario aquí.

Pero la combinación de cosas como la siguiente no da ningún error, pero todavía no tengo binding.pry del método destroy en el controlador.

 < %= link_to 'Destroy', [comment.post, comment], method: :delete, data: { confirm: 'Are you sure?' } %> 

y nunca recibo la confirmación como es de esperar.

Así que trata de descubrir qué está pasando con el jquery como sospechoso. Puedo confirmar que ese era mi caso, pero el rest lo dejo por nubes porque esto aparecerá en una búsqueda en Google.

Tuve el mismo problema y me di cuenta de que había creado mi aplicación Rails con -J que es lo mismo que --skip-javascript . Necesita JavaScript habilitado para que esto funcione; la falta de una ventana emergente para confirmar la eliminación es un regalo muerto.

incluir debajo de la línea en js

 //= require jquery_ujs 

incluir gem:

 gem 'jquery-rails' 

Destruye el enlace:

 < %= link_to "Logout", destroy_user_session_path %> 

Tenía exactamente este problema y fue causado al hacer doble clic en el bloque de código de la Guía y copiar / pegar el código directamente en mi editor (ST2 en OSX).

Debe verificar que el HTML generado para el enlace tenga este aspecto:

 Destroy Comment 

Si no lo hace, pero en su lugar se ve como a continuación, no se aplicará el Javascript:

 Destroy Comment 

Las grandes brechas entre el href y el Ruby sin analizar son causadas por los espacios sin interrupción (carácter unicode \u00a0 ) utilizados en la guía que se está copiando en el script.

No estoy seguro de por qué esto no causa un error de análisis de script.

Tuve el mismo problema que Barry. Asegúrese de copiar / pegar correctamente en su archivo /app/views/index.html.erb e inspeccione el html que se procesa.

Tuve el mismo problema En mi caso, ai tenía el archivo change \ app \ views \ layouts \ application.html.erb de

 < %= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> < %= javascript_include_tag 'application', 'data-turbolinks-track' => true %> 

a

 < %= stylesheet_link_tag 'default', media: 'all', 'data-turbolinks-track' => true %> < %= javascript_include_tag 'default', 'data-turbolinks-track' => true %> 

para evitar mi primer problema de Rails. Pero aparentemente destrozó la ejecución de JavaScript y causó el problema de destrucción. Por lo tanto, restituya su archivo \ app \ views \ layouts \ application.html.erb a su estado original y trate este problema como aquí

Rails ExecJS :: ProgramError en Pages # home?

en la respuesta evedovelli (sobre la gem coffeescript en windows).

Tengo el mismo problema. Yo trabajo de esta manera:

Mi env. es: A. ruby ​​2.2.4p230 (2015-12-16 revisión 53155) [x64-mingw32] B. Rails 4.2.5 C. Navegador: Firfox 44.02

  1. add include js en la página html porque la función delete usará js para manejar. < %= javascript_include_tag "application" %>

  2. agrega skip_before_action :verify_authenticity_token al controlador para evitar InvalidAuthenticityToken en AdsController # destroy

  3. agregue link_to en su página web < %= link_to 'Delete', post, method: :delete, data: {confirm: "Are you sure?"}%>

    Ahora, puedo usar link_to para eliminar un registro de mi página.