2011-02-14 6 views
10

Nel mio file index.html.erb sto provando a visualizzare il titolo sul mio oggetto (un "elenco") e il normale "mostra", "modifica" e "distruggi" link e/o pulsanti. Con: method =>: delete e: confirm => "sei sicuro?", Né link_to o button_to presenteranno la casella di conferma javascript. Qui è la mia index.html.erb:Rails 3 - Javascript: conferma di non funzionare per link_to e 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> 

link di conferma "Ciao Mondo" JS in cima alla lista funziona perfettamente, quindi sono abbastanza sicuro che JavaScript discreto sta lavorando bene per la mia app. (Ho anche confermato che ho il necessario - javascript_include_tag: defaults e csrf_meta_tag sono nel mio modello di applicazione.) La documentazione di Rails conferma che gli argomenti che sto usando sono supportati (url,: confirm,: method). Tuttavia né button_to né link_to genereranno l'avviso JS indicato da: confirm. Un altro po 'di stranezza, con gli stessi identici argomenti, button_to cancellerà un record mentre link_to non lo farà.

Qualsiasi suggerimento su cosa investigare per risolvere questo problema sarebbe apprezzato.

Grazie!

+0

Controllare 'application/config. rb' per vedere se stai caricando i file JS che pensi di essere come predefiniti. (Sono stato un po 'di recente quando ho provato a creare un'applicazione per rails usando jQuery invece di Prototype. I valori di default erano vuoti.) – Telemachus

risposta

2

Mi sono imbattuto in questo esatto problema prima, quando ho accidentalmente incluso sia Prototype che jQuery. Controlla le risorse che vengono caricate per assicurarti di non caricare in qualche modo entrambi i framework.

+1

Grazie per i suggerimenti. Sono un ruby ​​nube, ma dopo un po 'di googling, ho potuto dire che ho effettivamente hava alcuni problemi di configurazione javascript. 1) Il builder dell'applicazione di rotaie che ho usato ha messo il mio file jquery.js nella cartella "public/javascript", ma all'interno di una cartella chiama jquery (ho dovuto spostarlo di un livello.) 2) il file config/application.rb aveva due linee di configurazione javascript. Ne ho cancellato uno e mi sono assicurato che il secondo indicasse il file jquery.js sopra menzionato. Con quelli per i cambiamenti tutto ha funzionato. –

1

AFAIK Questo problema è causato a causa della possibilità link_to che causa problemi quando il suo metodo è qualcosa di diverso da GET (metodo HTTP), per cui uso button_to opzione che funziona bene

1

Ho appena incontrato lo stesso problema, nuovi Rails disponibili fino ad oggi, e risolto spostando l'opzione :confirm-html_options parte di link_to argomenti, come:

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

infatti, necessario il jquery-rails gemma, ma che si era già qui e correttamente collegato.

1

Controllare se adattatore scripting discreto Rails per jQuery (jquery_ujs) vengono caricati nel tuo sito, allora non c'è bisogno di preoccuparsi di JavaScript di terze parti:

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

Questa è la risposta giusta :) – Ghoti