2011-02-14 26 views
10

En mi archivo index.html.erb estoy intentando mostrar el título de mi objeto (un "listado") y lo normal "mostrar", "editar" y "destruir" enlaces y/o botones. Con: method =>: delete y: confirm => "¿estás seguro?", Ni link_to ni button_to presentarán el cuadro de confirmación de javascript. Aquí está mi index.html.erb:Rails 3 - Javascript: confirme que no funciona para link_to y button_to con: method =>: delete

<h2><a href="#" onclick="alert('Hello world!'); return false;">Click Here for a Javascript test</a></h2> 
<table> 
    <tr> 
    <th>List Title</th> 
    <th></th> 
    <th></th> 
    <th></th> 
    </tr>  
<% @listings.each do |listing| %> 
    <tr> 
    <td><%= listing.title %></td> 
    <td><%= button_to 'Show', listing %></td> 
    <td><%= button_to 'Edit', edit_listing_path(listing) %></td> 
    <td><%= button_to('Destroy', listing, 
         :confirm => 'Are you sure?', :method => :delete)%> </td> 
    <td><%= link_to "Destroy", listing, :confirm => "Are you sure?", :method => :delete %> </td> 
    </tr> 
<% end %> 
</table> 

El enlace de confirmación "Hello World" JS en la parte superior de la lista funciona a la perfección, así que estoy bastante seguro de que Javascript discreta está trabajando bien para mi aplicación. (También confirmé que tengo lo necesario-- javascript_include_tag: los valores predeterminados y csrf_meta_tag están en mi plantilla de aplicación). La documentación de Rails confirma que los argumentos que estoy usando son compatibles (url,: confirm,: method). Sin embargo, ni button_to ni link_to generarán la alerta JS indicada por: confirm. Otro detalle extraño, con exactamente los mismos argumentos, button_to eliminará un registro mientras que link_to no lo hará.

Cualquier sugerencia sobre qué investigar para solucionar esto sería apreciada.

Gracias!

+0

Comprobar aplicación '/ config. rb' para ver si está cargando los archivos JS que cree que tiene como valores predeterminados. (Estuve un poco por esto recientemente cuando traté de crear una aplicación de rieles usando jQuery en lugar de Prototype. Los valores predeterminados estaban vacíos). – Telemachus

Respuesta

2

Me encontré con este problema exacto antes cuando accidentalmente incluí tanto Prototype como jQuery. Compruebe los recursos que se cargan para asegurarse de que no está cargando ambos marcos de alguna manera.

+1

Gracias por los punteros. Soy un ruby ​​nube, pero después de un poco de googleo, podría decir que sí tuve algunos problemas con la configuración de JavaScript. 1) El creador de aplicaciones rails que utilicé puso mi archivo jquery.js en la carpeta "public/javascript", pero dentro de una carpeta llamaba a jquery (tuve que moverlo un nivel) 2) el archivo config/application.rb tenía dos líneas de configuración de javascript. Eliminé uno y me aseguré de que el segundo apuntaba al archivo jquery.js mencionado anteriormente. Con ésos a los cambios todo funcionó. –

1

Aparentemente, este problema es causado debido a la opción de link_to que causa problemas cuando su método es otra cosa que no sea GET (método HTTP), así que uso button_to opción que funciona muy bien

1

Me acabo de encontrar con el mismo problema, más nuevos carriles disponibles hasta la fecha, y se resuelven moviendo la opción :confirm a html_options parte de link_to argumentos, como:

<%= link_to (t '.scenarios.open'), { :controller => 'scenarios', :action => 'show', :name => scenario.name }, :confirm => 'really?' %> 

de hecho, necesita la gema jquery-rails, pero que uno ya estaba aquí y debidamente vinculado.

1

Comprobar si adaptador de scripting discreto Rails para jQuery (jquery_ujs) se cargan en su sitio, entonces usted no necesita preocuparse por los javascript terceros:

// app/assets/javascript/application.js  
//= require jquery_ujs 
+0

Esta es la respuesta correcta :) – Ghoti

Cuestiones relacionadas