2013-04-03 29 views
11

Tôi vừa mới bắt đầu mã hóa bằng ruby ​​trên đường ray và tôi đã làm theo hướng dẫn đang sử dụng phiên bản đường ray lỗi thời hơn tôi đang sử dụng. Tôi đang sử dụng 3.2.12: xác nhận trong đường ray không hoạt động

Đây là mã của tôi:

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

Từ những gì tôi hiểu, đây là những biểu tượng được truyền cho đường ray, sau đó được chuyển đổi sang một trong hai một html hoặc hành động javascript mà sau đó pops lên hộp tin nhắn và xóa đối tượng nếu có. Đoạn mã trên phá hủy đối tượng, nhưng nó không bật lên hộp xác nhận. Tại sao điều này? Ngoài ra, tôi đã có những điều sau đây ở trên như sau: đầu tiên:

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

Hộp xác nhận không xuất hiện trong bất kỳ trường hợp nào, sử dụng link_to hoặc button_to. Dưới đây là html được hiển thị khi được kiểm tra bằng thanh tra của Chrome. jquery và jquery-ujs cũng được tải vào, vì vậy tôi không chắc chắn nên đi đâu từ đây.

<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="> 

Cảm ơn!

Trả lời

50

Tôi phải thêm thuộc tính xác nhận bên trong thuộc tính dữ liệu để làm cho thuộc tính đó hoạt động. Tôi đang sử dụng đường ray 4 với bootstrap. Tôi hy vọng điều này sẽ giúp người khác có vấn đề đó.

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

Vâng, điều này đã làm cho tôi. Cảm ơn. – Billy

+0

Vâng, nó hoạt động. – Avishai

+0

Làm việc cho tôi bằng cách sử dụng Rails 4 và Foundation. Cảm ơn! –

9

này dựa trên jQuery, đảm bảo bạn có những điều sau đây:

trong Gemfile bạn

group :assets do 
    gem 'jquery-rails' 
end 

tài sản/Javascripts/file application.js của bạn, trước khi dòng //= require_tree .

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

Tôi có cả hai thẻ bạn đang đề cập đến, nhưng nó vẫn không bật lên hộp xác nhận – jamesdlivesinatree

+0

Tôi cho rằng bạn 'bundle install'và khởi động lại máy chủ đường ray của bạn? – Benj

+0

Tôi làm cách nào để kiểm tra xem javascript có hoạt động không? Tôi không nghĩ rằng đó là, và tôi nghĩ rằng đây là vấn đề. Tôi chỉ không chắc điều gì gây ra nó. – jamesdlivesinatree

5

Sự khác biệt giữa link_to và button_to là động từ HTTP. link_to đưa ra các yêu cầu GET và button_to đưa ra các yêu cầu POST. Với định tuyến RESTful, hành động delete là yêu cầu POST tới bộ điều khiển/id. Nếu bạn phát hành bộ điều khiển GET đến /id, nó sẽ được gửi đến hành động show.

AIUI, liên kết đến bất kỳ điều gì khác ngoài động từ GET là Ý tưởng tồi. Một, nhấp chuột phải không giữ nguyên động từ. Hai, bạn không muốn bot thu thập dữ liệu trang để theo dõi liên kết và do đó kích hoạt hành động delete mặc dù bạn có thể cần phải đăng nhập để thực sự sửa đổi cơ sở dữ liệu.

+1

Cảm ơn bạn đã giải thích. Rất thông tin và có ý nghĩa hơn bây giờ. Tuy nhiên, tôi vẫn còn tò mò về cách để có được: xác nhận để bật lên. Điều này vẫn không làm việc cho tôi. – jamesdlivesinatree

3

Cảm thấy khá ngu ngốc, nhưng quảng cáo đã chặn hộp tin nhắn. Xin lỗi vì điều đó. Tất cả là tốt, tôi chỉ vô hiệu hóa adblock.

+0

Vui :) nhưng vui vì bạn đã tìm thấy nó :) – Benj

0

Tôi có trình chặn cửa sổ bật lên đang chạy trong Chrome. Tôi chỉ ghi vào danh sách trắng http://localhost:3000 và nó có hiệu quả đối với tôi.

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