ErrorTracking - uploading files with form_tag

小白基础知识栽跟斗。

问题描述

表单中上传文件时遇到的一个问题:

正常情况下,上传文件后,传递的params应该是这样:

"attachments_attributes"=>[{"file"=>#<ActionDispatch::Http::UploadedFile:0x007f9fcd2b4188 @tempfile=#Tempfile:/var/folders/w4/qw3_jsfs0572hmqcl34v9xx00000gn/T/RackMultipart20180918-7216-12k5se6.jpg, @original_filename="sunset.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name="attachments_attributes[file]"; filename="sunset.jpg"\r\nContent-Type: image/jpeg\r\n">}]

但是我的却是这样:

"attachments_attributes"=>[{"file"=> "sunset.jpg"}]

解决方法

解决方法其实就在ROR文档中。【果然,文档要细细读啊!】

action view form helpers中明明白白提到了:

image-20180919092904541

代码中使用了form_tag,如果需要上传文件,必须添加multipart: true。

当form_tag添加了multipart: true ,等同于:

form_tag('/upload', multipart: true)
# => <from action ="/upload", enctype="multipart/form-data" method="post">

而当表单中含有上传文件的控件时,必须使用**enctype=”multipart/form-data”**。

参考

action view form helpers

form_tag