2013-07-10 21 views
8

Đây là dự án đầu tiên của tôi trong đường ray, đó là tạo bảng để lưu trữ dữ liệu về trò chơi. Tôi có thể hiển thị dữ liệu từ bảng về điểm số của người chiến thắng, số điểm thua cuộc, v.v. Tuy nhiên, tôi gặp vấn đề với cột trong bảng có chứa các liên kết xóa cho mỗi trò chơi.Sự cố trong đường ray 4.0 với việc tạo liên kết_để xóa một hành động

Dưới đây là mã của tôi trong bộ điều khiển trò chơi dành cho các phương pháp xóa:

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

Một đoạn mã bàn của tôi, trong đó bao gồm dòng cho lệnh 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 %> 

Ở routes nộp tôi được gọi là

resources :games 

Theo hiểu biết của tôi, giúp tạo định tuyến cơ bản. Bất cứ ai có thể giúp tôi tìm ra lý do tại sao link_to của tôi không hoạt động?

Trả lời

17

Nếu bạn sử dụng (được khuyến nghị) resources: a) Hành động xóa hồ sơ của bạn phải được đặt tên là destroy. b) Ván đang tìm kiếm với :id tham số:

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

c) Liên kết của bạn nên là:

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

kể từ khi con đường là giống như đối với các hành động show, các thig duy nhất thay đổi là Phương thức HTTP.

+0

Tôi nên xem xét hành động của mình ở đâu? Điều đó có chứa trong phương thức rake không? –

+0

@MichaelLiu yes, đầu ra của tác vụ 'rake routes' chứa các tên hành động thích hợp. –

+0

@MarekLipka Tôi gặp vấn đề tương tự nhưng tôi không thể có phương thức ': delete' để hoạt động. Không có vấn đề gì tôi làm, nó kết quả trong một yêu cầu 'get'. Bất kỳ ý tưởng tại sao? '<% = link_to (" Xóa! ", {: controller => 'projects',: action => 'destroy',: id => dự án.hashed_id}, {method:: delete})%> ' – emersonthis

6

Định dạng cho cuộc gọi xóa là:

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

sử dụng rake routes để tìm hiểu về các tuyến đường có sẵn, bao gồm cả những người giúp đỡ con đường tạo ra, và bộ điều khiển/xử lý yêu cầu hành động.

+0

Cảm ơn rất nhiều, Đây thực sự là những gì tôi muốn. :) –

5

Tôi có vấn đề tương tự trên đường ray 4.2.1, ngay cả với: method =>: delete on link_to nó vẫn là tuyến để hiển thị phương thức.

Nhưng sử dụng phương pháp button_to như dưới đây hoạt động!

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

button_to tạo ra một hình thức xung quanh nút và sau đó viết phương pháp xóa, bằng cách thêm một lĩnh vực ẩn tên _method với giá trị delete ray sử dụng này để định tuyến đến phá hủy phương pháp trong điều khiển của bạn.

+0

Tôi đã gặp vấn đề tương tự khi 'link_to' không hoạt động với' phương thức:: delete', nhưng đã giải quyết nó bằng cách thêm 'jquery_ujs' vào ứng dụng của tôi.js https://stackoverflow.com/a/23331608/4249632 – Ryan

0

Cố gắng sử dụng <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> trước <%= javascript_include_tag "application" %> trong cách bố trí của bạn, và cũng có thể xóa

//= require jquery 

dòng trong application.js của bạn. Đây là trường hợp của tôi. Không biết tại sao nó không hoạt động với file jquery.js.

Các vấn đề liên quan