2013-07-10 23 views
8

To jest mój pierwszy projekt w szynach, który polega na utworzeniu tabeli, która będzie przechowywać dane o grach. Jestem w stanie wyświetlić dane z tabeli na temat wyniku zwycięzcy, wyniku przegranego itp. Mam jednak problemy z moją kolumną tabeli, która zawiera linki usuwania dla każdej gry.Problem w szynach 4.0 z utworzeniem łącza do usunięcia akcji

Oto mój kod w kontrolerze gier dla metody Delete:

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

fragment mojego kodu tabeli, która zawiera linię do polecenia 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 %> 

W trasach pliku I o nazwie

resources :games 

Co, według mojej wiedzy, pomaga w generowaniu trasowania podstawowego. Czy ktoś mógłby mi pomóc dowiedzieć się, dlaczego moje łącze nie działa?

Odpowiedz

17

Jeśli używasz (co jest zalecane) resources: a) Twoja akcja usuwania rekordów powinna mieć nazwę destroy. b) Gra jest poszukiwany z :id parametru:

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

c) Twój link powinien być:

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

ponieważ ścieżka jest taka sama, jak w przypadku działania show jedynym thig że zmienia się Metoda HTTP.

+0

Gdzie powinienem sprawdzić, jakie działania powinienem nazywać? Czy jest to zawarte w metodzie tras do gry? –

+0

@MichaelLiu tak, dane wyjściowe zadania 'rake routes' zawierają odpowiednie nazwy akcji. –

+0

@MarekLipka Mam dokładnie ten sam problem, ale nie mogę uruchomić metody ': delete'. Bez względu na to, co robię, powoduje to żądanie 'get'. Jakieś pomysły, dlaczego? '<% = link_to (" Usuń! ", {: kontroluj =>" projekty ",: akcja =>" zniszcz ",: id => projekt.hashed_id}, {method:: delete})%> ' – emersonthis

6

Format delete zaproszenia jest:

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

użycie rake routes aby dowiedzieć się o dostępnych trasach, w tym generowanych pomocników tras, oraz rozpatrywania wniosku kontrolera/akcji.

+0

Wielkie dzięki, To jest to, czego chcę. :) –

5

Miałem podobny problem na szynach 4.2.1, nawet z: method =>: delete on link_to nadal trasuje metodę show.

Ale użycie metody button_to jak poniżej działa!

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

button_to tworzy formę wokół przycisku, a następnie posty z metodą usuwania, dodając ukryte pole o nazwie _method o wartości delete szyn używa tego, aby skierować do sposobu zniszczenia w kontrolerze.

+0

Miałem ten sam problem, gdy 'link_to' nie działało z' method:: delete', ale rozwiązało to przez dodanie 'jquery_ujs' do mojego application.js https://stackoverflow.com/a/23331608/4249632 – Ryan

0

Spróbuj użyć <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> przed <%= javascript_include_tag "application" %> w układzie, a także usuwać

//= require jquery 

wiersz w swoim application.js. Tak było w moim przypadku. Nie mam pojęcia, dlaczego nie zadziałał z oryginalnym plikiem jquery.js rails.