Tôi muốn tải tệp lên bằng AJAX. Trong quá khứ tôi đã hoàn thành điều này bằng cách sử dụng phép thuật jQuery form plugin và nó hoạt động rất tốt. Hiện tại tôi đang xây dựng một ứng dụng Rails và cố gắng làm mọi thứ "The Rails Way" vì vậy tôi đang sử dụng Trình trợ giúp biểu mẫu và đá quý kẹp giấy để thêm tệp đính kèm.Rails 4: Cách tải tệp lên bằng AJAX
Các rails docs cảnh báo rằng Helper Mẫu không làm việc cho tập tin cập nhật AJAX:
Không giống như các hình thức khác làm cho một hình thức tập tin tải lên không đồng bộ không phải là đơn giản như cung cấp form_for với từ xa: true. Với biểu mẫu Ajax, việc tuần tự hóa được thực hiện bằng JavaScript chạy bên trong trình duyệt và vì JavaScript không thể đọc tệp từ ổ cứng của bạn, tệp không thể tải lên được. Cách giải quyết phổ biến nhất là sử dụng khung nội tuyến vô hình làm mục tiêu cho việc gửi biểu mẫu.
Dường như không có giải pháp nào có sẵn. Vì vậy, tôi tự hỏi điều gì là thông minh nhất để làm. Có vẻ như tôi có một số tùy chọn:
- Sử dụng trình trợ giúp biểu mẫu và thủ thuật iframe.
- Sử dụng trình trợ giúp biểu mẫu + tải biểu mẫu jQuery plugin để gửi tệp (không chắc chắn nếu điều này sẽ phát đẹp với mã thông báo xác thực của Rails, v.v.)
- Sử dụng trình trợ giúp biểu mẫu + kẹp giấy + [một số đá quý khác] để mở rộng chức năng của nó để cho phép gửi biểu mẫu AJAX.
Cả ba đều có thể. Tôi biết ít nhất về # 3, đặc biệt là phần [một số đá quý khác]. Tôi đã tìm thấy hai câu hỏi tương tự (this và this) đề cập đến một nhánh Pic-Upload có tên là Uploadify nhưng cả hai đều được 2 tuổi và xử lý Rails 2 và 3 (và Uploadify chưa được cập nhật trong nhiều năm). Vì vậy, cho bao nhiêu đã thay đổi, tôi nghĩ rằng đây thực sự là một câu hỏi hoàn toàn mới:
Cách tốt nhất để tải tệp lên bằng AJAX trong Rails 4 là gì?
Tôi nghĩ rằng trích dẫn giải thích rõ ràng lý do tại sao bạn luôn làm điều đó "bằng cách sử dụng plugin hình thức jQuery kỳ diệu";) –
Bất kỳ lời khuyên nào về cách trơn tru nhất để sử dụng nó cùng với trợ giúp biểu mẫu của Rails? Tôi nghĩ rằng tôi không nên sử dụng: remote => true và chỉ cho phép plugin biểu mẫu thực hiện công việc. – emersonthis
Plugin đó thật tuyệt vời-- chỉ cần thử nó và hoạt động như một sự quyến rũ. Cảm ơn cho câu hỏi thông tin :) – Jay