2008-12-10 32 views
8

Sau khi trở về dự án Rails cũ tôi thấy không có liên kết hủy/xóa nào hoạt động và nhấp hủy trên cửa sổ xác nhận sẽ vẫn gửi liên kết.phương pháp: =>: xóa không hoạt động và: xác nhận tùy chọn bị bỏ qua

Ví dụ về mã của tôi là:

<%= link_to 'Delete', admin_user_path(@user), :confirm => 'Are you sure?', :method => :delete %> 
+1

Tôi gặp sự cố tương tự này trong ứng dụng Rails 3 sử dụng jQuery. Bạn đã bao giờ tìm thấy một giải pháp? – Callmeed

Trả lời

3

Vấn đề này xảy ra nếu bạn đang sử dụng jQuery, và nếu không, sau đó tìm kiếm một cái gì đó như thế:

Trong trường hợp của tôi, tôi đã sử dụng:

javascript_include_tag: tất cả%>

Và nó đã không làm việc, nhưng khi tôi đặt nó thích:

javascript_include_tag: defaults%>

nó làm việc!

+0

jquery, phải ... quên mất điều đó. –

0

Chris, Hi. Tôi đã từng gặp vấn đề tương tự. Tôi đã xóa Firebug và sự cố vẫn tiếp diễn. Tôi đọc từ một người dùng khác rằng anh ta cần khởi động lại Firefox, điều đó cũng không hoạt động. Một số người nói thử Safari, điều đó cũng không có tác dụng.

Cuối cùng nó là một điều mới:

Tôi có người giúp đỡ để chèn một biểu tượng, như edit_icon, mà trả về một thẻ hình ảnh tốt đẹp cho các biểu tượng chỉnh sửa vv

Một trong những phương pháp helper là phương pháp delete_icon, nơi tôi đã viết như sau:

def delete_icon (object = nil) link_to image_tag ('icons/delete.jpg',: width => 20,: border => 0), đối tượng,: confirm => 'Bạn có chắc chắn?',: method =>: xóa kết thúc

Đó là một nỗ lực tốt (DRY), nhưng tốt hơn là tôi đã có def_icon (đối tượng), và không phải object = nil, bởi vì nó làm cho nó rõ ràng hơn khi tôi gọi nó là tôi phải vượt qua nó đối tượng hủy diệt. Gọi cùng một phương thức với đối tượng cần xóa đã làm việc cho tôi.

Tóm lại: kiểm tra lại các phương pháp trợ giúp của bạn nếu bạn đang cố gắng DRY.

0

Trong trường hợp của tôi, nó có vẻ là một vấn đề với sự kết hợp giữa nguyên mẫu và rails.js. Câu trả lời từ câu hỏi này đã dẫn tôi đến điều đó: :confirm option in Rails being ignored while using Rails 3 and jQuery UJS

Vì vậy, tôi đã tải xuống phiên bản mới nhất từ ​​https://github.com/rails/prototype-ujs/raw/master/src/rails.js và mẫu thử nghiệm mới nhất từ ​​https://ajax.googleapis.com/ajax/libs/prototype/1.7.0.0/prototype.js.

Bây giờ mọi thứ dường như hoạt động như mong đợi.

0

Dưới đây là một cách để sử dụng jQuery để cung cấp thư xác nhận tương tự cho tất cả các nút xóa:

;(function($){ 
    $(function(){ 
    $('input.destroy').click(function(){ 
     return confirm($(this).attr('data-confirm')); 
    }); 
    }); 
})(jQuery); 

Bạn chỉ cần phải chắc chắn để thêm class = "tiêu diệt" cho mỗi yếu tố, ví dụ:

= button_to 'Delete', polygon, :method => :delete, :class => "destroy", :confirm => "Are you sure?" 
0

Hầu hết thời gian, điều này xảy ra vì bạn đang gọi mã jQuery trước khi nó được tải hoặc trước khi các phần tử trong trang tồn tại.

Để chống lại sử dụng một cái gì đó này như:

$(document).ready(function() { 
    $('*[data-confirm]').click(function(){ 
    return confirm($(this).attr('data-confirm')); 
    }); 
}); 
0

Dưới đây là giải pháp nhanh chóng - Chỉ cần thay thế phù hợp với dữ liệu xác nhận

<%= link_to 'Delete', admin_user_path(@user), 'data-confirm' => 'Are you sure?', :method => :delete %> 
0

Cố gắng sử dụng

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.0.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 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