2013-07-10 7 views
8

Questo è il mio primo progetto in rails, che è quello di creare una tabella che memorizzerà i dati sui giochi. Sono in grado di visualizzare i dati della tabella sul punteggio del vincitore, sul punteggio perdente, ecc. Tuttavia, ho problemi con la mia colonna della tabella che contiene i collegamenti di eliminazione per ogni gioco.Problema in rails 4.0 con la creazione di un link_to per un'azione di eliminazione

Ecco il mio codice nel controller giochi per il metodo di eliminazione:

def delete 
    @game = Game.find(params[:game]) 
    @game.destroy() 
    redirect_to :action => 'index' 
end 

Un frammento di mio codice tabella, che include la linea per il comando link_to

<% @games_items.each do |t| %> 
    <tr> 
     <td><%= t.winner.name %></td> 
     <td><%= t.loser.name %></td> 
     <td><%= t.challenger.name %></td> 
     <td><%= t.winner_score %></td> 
     <td><%= t.loser_score %></td> 
     <td><%= link_to 'Delete', delete_game_path(id: t.id)%></td> 
    </tr> 
    <% end %> 

Nelle rotte file chiamato

resources :games 

Che, a mia conoscenza, aiuta a generare il routing di base. Qualcuno potrebbe aiutarmi a capire perché il mio link_to non funziona?

risposta

17

Se si utilizza (che è consigliato) resources: a) L'azione per l'eliminazione dei record deve essere denominata destroy. b) Gioco è cercato con :id parametro:

def destroy 
    @game = Game.find(params[:id]) 
    @game.destroy 
    redirect_to :action => 'index' 
end 

c) Il link dovrebbe essere:

<%= link_to 'Delete', t, method: :delete %> 

in quanto il percorso è lo stesso per l'azione show, l'unico thig che cambia è Metodo HTTP

+0

Dove dovrei cercare di vedere quali sono le mie azioni? È quello contenuto nel metodo delle rotte di rastrello? –

+0

@MichaelLiu yes, l'output del task 'rake routes' contiene i nomi delle azioni appropriate. –

+0

@MarekLipka Sto avendo lo stesso identico problema ma non riesco a far funzionare il metodo ': delete'. Qualunque cosa io faccia, si ottiene una richiesta "get". Qualche idea, perché? '<% = link_to (" Elimina! ", {: controller => 'progetti',: azione => 'distruggi',: id => progetto.hashed_id}, {method:: delete})%> ' – emersonthis

6

Il formato per la chiamata di eliminazione è:

<%= link_to 'Delete', game_path(t.id), :method => :delete %> 

uso rake routes per conoscere i percorsi disponibili, tra cui aiutanti percorso generati, e che gestisce la richiesta di controllo/azione.

+0

Grazie mille, questo è quello che voglio. :) –

5

Ho avuto problemi simili su rails 4.2.1, anche con: metodo =>: cancella su link_to continua a mostrare il metodo.

Ma utilizzando il metodo button_to come indicato di seguito!

<%= button_to "delete", article_path(:id => article.id), :method => :delete %> 

button_to crea una forma attorno al pulsante e poi i messaggi al metodo di eliminazione, con l'aggiunta di un campo nascosto denominato _method con valore delete rotaie utilizza questo percorso per il metodo destroy nel controller.

+0

Ho avuto lo stesso problema in cui 'link_to' non funzionava con' metodo:: delete', ma l'ho risolto aggiungendo 'jquery_ujs' al mio application.js https://stackoverflow.com/a/2333160/4/4249632 – Ryan

0

tenta di utilizzare <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> prima <%= javascript_include_tag "application" %> nel layout, e anche cancellare

//= require jquery 

linee nel vostro application.js. Questo era il mio caso. Non ho idea del motivo per cui non ha funzionato con il file jquery.js delle guide originali.