2013-09-03 46 views
22

Sử dụng đường ray 4 và cố gắng thêm trường tệp vào biểu mẫu hiện có, sử dụng simple_form và kẹp giấy.Trường tải lên tệp gây ra ActionController :: InvalidAuthenticityToken exception

Đây là phần quan trọng của hình thức:

<%= simple_form_for(@employee, html: { class: 'form-horizontal requires', multipart: true}, remote: true) do |f| %> 

    <%= f.input :avatar %> 

<% end %> 

Mọi thứ hoạt động ok, trừ khi tôi thực sự gửi biểu mẫu với một tập tin tải lên. Sau đó, tôi nhận được điều này:

ActionController::InvalidAuthenticityToken in EmployeesController#update 

Tôi đang làm gì sai ở đây?

+2

Tôi tin rằng câu trả lời của bạn là [ở đây] [1] Hình như mới với đường ray 4. [1]: http://stackoverflow.com/ câu hỏi/16258911/rails-4-authenticity-token –

Trả lời

15

Giải pháp đơn giản nhất là thêm authenticity_token: true vào biểu mẫu của bạn. Như thế này:

<%= form_for @employee, html: { class: 'form-horizontal requires'}, multipart: true, remote: true, authenticity_token: true do |f| %> 
    <%= f.input :avatar %> 
<% end %> 
+2

thêm 'authenticity_token: true' làm việc như một nét duyên dáng :-) – Avishai

+0

được cảnh báo rằng tùy chọn' remote: true' sẽ bị bỏ qua và biểu mẫu được gửi dưới dạng 'html'. Nếu bạn muốn gửi biểu mẫu dưới dạng 'js' nhìn vào câu trả lời [William] (http://stackoverflow.com/a/21029501/1079609). – golfadas

20

Tôi đã gặp vấn đề tương tự. <%= token_tag form_authenticity_token %> không hoạt động đối với tôi.

Cài đặt gem remotipart giải quyết được sự cố của tôi. remotipart

+5

Đây là câu trả lời thực tế nếu bạn đang cố gắng gửi tệp bằng điều khiển từ xa: đúng và muốn phản hồi bằng tệp js.erb. Cài đặt đá quý remotipart (rất nhanh chóng và dễ dàng) và nó hoạt động như một sự quyến rũ. – DerProgrammer