sintassi link_to con le rotaie 3 (link_to_remote) e JavaScript di base non funziona in un rotaie 3 app?

StackOverflow https://stackoverflow.com/questions/2458841

Domanda

Mi chiedo se la sintassi link_to base è completamente rotto in master Rails3 corrente o se mi sto facendo un po 'di sintassi sbagliata qui.

= link_to "name", nil, :onlick => "alert('Hello world!');"

dovrebbe effettivamente produrre un avviso al clic. molto semplice. non funziona sul mio progetto Rails3! (Anche senza uscita di errore!) Tutte le idee?

per la sintassi link_to generale non ho potuto trovare un esempio in cui ho potuto combinare una link_to_remote con una conferma, a distanza e la classe html (vedi il mio tentativo di sotto)

= link_to "delete", {:action => "destroy", :remote => true, :method => :delete, :confirm => "#{a.title} wirklich Löschen?" }, :class => "trash"

anche l'API Rails3 non mi aiuta qui: http: //rails3api.s3.amazonaws .com / index.html

Aiuto!

È stato utile?

Soluzione 2

ok sembra che le nuove modifiche javascript discreto introdotto il problema. vedere il seguente post per ulteriori informazioni se si esegue in problemi simili http: //blog.loopedstrange. com / modesta-rubyist-archivio / rotaie-3-UJS-e-CSRF-meta-tag

 <%= csrf_meta_tag %>

fissato le cose per me.

Altri suggerimenti

Credo che il problema qui è che hai impostato il collegamento fino a mostrare l'allarme quando è leccato, a differenza di quando si fa clic. ;)

Per quanto riguarda link_to_remote, è cambiato con l'interruttore a JavaScript discreto. Si può leggere su qui: http : //blog.solnic.eu/2009/09/08/unobtrusive-javascript-helpers-in-rails-3.html

nil non funziona:

= link_to "name", nil, :onclick => "alert('Hello world!');"
=> <a href="/currentpath", onclick="alert('Hello world!');">name</a>

Si dovrebbe usare:

= link_to "name", "#", :onclick => "alert('Hello world!');"
=> <a href="#", onclick="alert('Hello world!');">name</a>

Se nessuna delle altre risposte qui funziona per voi allora forse questo sarà di aiuto.

Quindi, la dichiarazione csrf_meta_tag non era abbastanza per me, anche se deve essere aggiunto nel file di layout per Rails 3 in ogni caso. Con me si è rivelato essere un conflitto con jQuery. Ho appena messo questo:

<script type="text/javascript">
  jQuery.noConflict();
</script>

dopo il tag script rotaie nel mio layout e lo scontro tra Prototype e jQuery è stato risolto. Oplà mi è stato sempre la finestra di conferma sulla cancellazione.

Questa tecnica anche risolto il mio problema originale quando si utilizza link_to per cercare di eliminare un record. Con link_to qualsiasi distruggono comando sembrava il reindirizzamento alla pagina di spettacolo per il record. Quindi mi sono trasferito a button_to sulla base di qualche altra soluzione che ho visto, ma con nessuna conferma. Mi chiedo se ci sono alcuni problemi più profondi seduti con jQuery e Prototype.

Questo successo tutto in un aggiornato Rails 2.3.5 app che sembrava funzionare bene senza la necessità di includere prototipo o: di default nel mio file di layout.

Una nota a parte ho seguito queste istruzioni:

http: // Webtech. union.rpi.edu/blog/2010/02/21/jquery-and-rails-3/

per cercare di perdere Prototype tutti insieme per questo progetto e utilizzare il git modulo jQuery per Rails 3 invece. A seguito di queste istruzioni non hanno funzionato ed ero ancora senza finestre di dialogo confermare con button_to e la pagina spettacolo quando si utilizza link_to. Ho pensato di citare in modo salvare qualcuno la fatica di provare questo.

Un off-topic commento per una risposta di cui sopra poiché non posso commentare ancora: (

@robeastham: Ho pensato di lasciare alcuni commenti che possono aiutare con alcune delle questioni che avete encoutered.

Ho avuto il "distruggere collegamento ri-orientare alla pagina spettacolo al posto della pagina di indice" questione pure poiché il passaggio da ActiveRecord a Mongoid, e non hanno trovato una soluzione reale (già hanno prototipo rimosso). Tuttavia, una soluzione che funziona in modo pulito è quello di specificare esplicitamente il percorso ri-diretta usando: posizione per respond_with:

respond_with @themodel, :location => themodels_url

Per quanto riguarda ottenere una conferma pop-up con un pulsante, si potrebbe fare:

button_to "Button Name", { :controller => "your/controller", :action => :action_name, :confirm => "Text for the pop-up"}, { :method => :<method name> }

per es.

button_to "Click Here", { :controller => "home", :action -> :set_completed, :confirm => "Mark the item complete?" }, { :method => :put }

Questo ha funzionato per me:

<%= link_to "Recommend", recommend_user_path(@user), :remote => true %>

Controlla che questo è nel vostro punto di vista \ layout \ application.html.erb (o equivalente):

<%= csrf_meta_tags %>

Si noti che Rails v3.2.2 utilizza "tag" e non "tag"

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top