2013-04-03 19 views
11

Ho appena iniziato a scrivere codice in ruby ​​su binari e ho seguito una guida che utilizza una versione di binari più obsoleta di quella che sto utilizzando. Sto usando 3.2.12: conferma in binari non funzionante

Questo è il mio codice:

<%= button_to 'Destroy', product, :method => "delete", :confirm => 'Are you sure?' %> 

Da quello che ho capito, questi sono i simboli che sono passati alle rotaie, che viene poi convertito in uno di HTML o JavaScript azione che poi pops fino alla finestra del messaggio ed elimina l'oggetto, se applicabile. Il codice precedente distrugge l'oggetto, ma non fa apparire la casella di conferma. Perchè è questo? Inoltre, ho avuto quanto sopra come il seguente in un primo momento:

<%= link_to 'Destroy', product, :method => "delete", :confirm => 'Are you sure?' %> 

di dialogo di conferma non è popping up in qualsiasi circostanza, utilizzando link_to o button_to. Di seguito è riportato il rendering HTML quando ispezionato utilizzando l'ispettore di Chrome. jquery e jquery-ujs sono caricati anche in questo, quindi non sono sicuro di dove andare da qui.

<input name="_method" type="hidden" value="delete"> 
<input data-confirm="Are you sureeee?" type="submit" value="Destroy"> 
<input name="authenticity_token" type="hidden" value="Q2xicqELHYHtrwarbtPBe5PT2bZgWV5C+JdcReJI8ig="> 

Grazie!

risposta

50

Ho dovuto aggiungere il mio attributo di conferma all'interno dell'attributo dati per farlo funzionare. Sto usando rails 4 con bootstrap. Spero che questo aiuti qualcun altro che ha quel problema.

link_to 'Delete', @rule, method: :delete, data: { confirm: 'Are you sure you want to delete this alert?' } 
+0

Sì, questo è stato per me. Grazie. – Billy

+0

Bene, questo funziona. – Avishai

+0

Ha funzionato per me utilizzando Rails 4 e Foundation. Grazie! –

9

Questo si basa su jQuery, assicurarsi di avere il seguente:

nel vostro Gemfile

group :assets do 
    gem 'jquery-rails' 
end 

nel tuo/file/application.js attivi javascript, prima che la linea //= require_tree .

//= require jquery 
//= require jquery_ujs 
+0

Ho entrambi i tag a cui ti riferisci, ma ancora non compare la casella di conferma – jamesdlivesinatree

+0

Suppongo che tu abbia installato e riavviato il tuo server di rotaie? – Benj

+0

come posso verificare se javascript funziona? Non penso che lo sia, e penso che questo sia il problema. Non sono sicuro di cosa lo stia causando. – jamesdlivesinatree

5

La differenza tra link_to e button_to è il verbo HTTP. link_to emette le richieste GET e button_to per le richieste POST. Con il routing RESTful, l'azione delete è una richiesta POST a controller/id. Se si rilascia un GET al controller , viene inviato all'azione show.

AIUI, link_to con qualsiasi altro che non sia il verbo GET è una cattiva idea. Uno, con il tasto destro non conserva il verbo. Due, non si desidera che i bot eseguano la scansione della pagina per seguire il collegamento e quindi attivano l'azione delete anche se è probabilmente necessario accedere per modificare effettivamente il database.

+1

Grazie per la spiegazione. Molto informativo e ha molto più senso ora. Tuttavia, sono ancora curioso su come ottenere il: conferma per pop-up. Questo non funziona ancora per me. – jamesdlivesinatree

3

Si sente piuttosto stupido, ma Adblock stava bloccando la finestra del messaggio. Mi dispiace per quello Tutto va bene ora, ho solo disabilitato Adblock.

+0

Divertente :) ma felice che tu l'abbia trovato :) – Benj

0

Ho un blocco popup in esecuzione in Chrome. Ho appena inserito nella whitelist http://localhost:3000 e ha funzionato per me.