36

Rails 3 hiện một số nội dung mát mẻ để làm cho javascript không phô trương, vì vậy họ đã làm những việc như thế này:Làm thế nào Rails 3 "data-method = 'delete" "Degrade Gracefully?

= link_to "Logout", user_session_path, :method => :delete 

..converts để

<a href="/logout" data-method="delete" rel="nofollow">Logout</a> 

Nhưng nó chỉ xảy ra với tôi .. Khi tôi tắt javascript phương thức không còn DELETE nữa, nó GET như mong đợi. Vì vậy, có kế hoạch, hoặc là có một số cách để, cho phép các thuộc tính data- để làm suy giảm một cách duyên dáng, do đó liên kết vẫn là một yêu cầu DELETE?

Trả lời

37

Thay đổi họ đã thực hiện trong Rails 3 với các thuộc tính data- này không phải là về sự xuống cấp duyên dáng, đó là về JavaScript không phô trương.

Trong Rails 2, chỉ định :method => :delete trên liên kết sẽ tạo ra toàn bộ chuỗi JavaScript nội tuyến sẽ tạo biểu mẫu có đầu vào bị ẩn và sau đó gửi biểu mẫu. Điều đó cũng giống như bây giờ: tắt JavaScript và mặc định là yêu cầu GET. Như vậy, việc hỗ trợ trường hợp không có JavaScript cũng giống như trước đây.

Một tùy chọn là sử dụng biểu mẫu/nút thay vì liên kết để bạn có thể bao gồm phương thức dưới dạng trường ẩn, giống như Rails 2 JavaScript. Một tùy chọn khác là để có phiên bản GET đưa bạn đến một trang trung gian mà lần lượt có biểu mẫu/nút.

Lợi ích của phương pháp tiếp cận mới là không phô trương. JavaScript để thay đổi động từ HTTP tồn tại trong một tệp bên ngoài và sử dụng các thuộc tính data- để xác định phần tử nào cần được đính kèm.

4

Cơ hội duy nhất bạn có là xác định biểu mẫu. Liên kết không thể là POST với _method = "delete" không có Javascript hoặc theo biểu mẫu.

+0

nó có thể có chuỗi truy vấn _method = xóa – myfreeweb

+0

thể công trình, vâng bạn ngay – shingara

21

Thay vì sử dụng các phương pháp link_to - mà sẽ yêu cầu bạn sử dụng JavaScript để đảm bảo rằng các phương thức HTTP là DELETE - sử dụng phương pháp button_to, mà sẽ tạo ra một hình thức với một yếu tố đầu vào ẩn mà nói với Rails để điều trị các HTTP phương thức như DELETE thay vì POST. Nếu cần thiết, bạn có thể sử dụng CSS để tạo kiểu cho nút trong biểu mẫu để nó trông giống như một liên kết.

+0

này đã làm việc cho tôi khi bản thân liên kết đã được nạp sau khi thực tế qua JavaScript, ngăn ngừa Rails từ thay thế nó bằng biểu mẫu. Tôi cho rằng 'button_to' đã hoạt động vì nó biến nó thành một biểu mẫu ở phía Ruby của những thứ thay vì bằng JavaScript sau khi trang được tải. Tôi chưa bao giờ nghe nói về 'button_to' trước đây, vì vậy cảm ơn bạn! – LouieGeetoo

1

Không thể không có javascript.

Tôi tạo một plugin jQuery nhỏ để chuyển đổi data-method thuộc tính liên kết thành dạng ẩn giả (được sử dụng trong dự án laravel chẳng hạn).

Nếu bạn muốn sử dụng nó:? https://github.com/Ifnot/RestfulizerJs

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