ruby-on-rails - delete - rails link_to params
Rails 4 link_to Destruye no funciona en el tutorial de Introducción (12)
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
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:
<% @posts.each do |post| %>
<tr>
<td><%= post.title %></td>
<td><%= post.text %></td>
<td><%= link_to ''Show'', post %></td>
<td><%= link_to ''Edit'', edit_post_path(post) %></td>
<td><%= link_to ''Destroy'', { action: :destroy, id: post.id }, method: :delete, data: { confirm: ''Are you sure?'' } %></td>
</tr>
<% end %>
En las rutas.rb
Blog::Application.routes.draw do
resources :posts do
resources :comments
end
root to: ''welcome#index''
end
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
<td><%= link_to ''Destroy'', { action: :destroy, id: post.id }, method: :delete, data: { confirm: ''Are you sure?'' } %></td>
no va a funcionar para eso.
Esto es lo que tiene
<td><%= link_to ''Destroy'', [comment.post, comment], :confirm => ''Are you sure?'', :method => :delete %></td>
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.
<td><%= link_to ''Destroy'', [comment.post, comment], method: :delete, data: { confirm: ''Are you sure?'' } %></td>
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 resto lo dejo por nubes porque esto aparecerá en una búsqueda en Google.
Prueba esto
<%= link_to ''Destroy'', post, method: :delete, data: { confirm: ''Are you sure?'' } %>
Resolví el problema simplemente añadiendo assets / javascripts / application.js
//= require jquery_ujs
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:
<a data-confirm="Are you sure?" data-method="delete" href="/posts/3/comments/3" rel="nofollow">Destroy Comment</a>
Si no lo hace, pero en su lugar se ve como a continuación, no se aplicará el Javascript:
<a href="/posts/3/comments/3" data="{:confirm=>"Are you sure?"}" method="delete">Destroy Comment</a>
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.
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
add include js en la página html porque la función delete usará js para manejar.
<%= javascript_include_tag "application" %>
agrega
skip_before_action :verify_authenticity_token
al controlador para evitar InvalidAuthenticityToken en AdsController # destroyagregue 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.
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 gema coffeescript en windows).
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 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.
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 lugar de link_to
incluir debajo de la línea en js
//= require jquery_ujs
incluir gema:
gem ''jquery-rails''
Destruye el enlace:
<%= link_to "Logout", destroy_user_session_path %>
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.