小白基础知识栽跟斗。
问题描述
表单中上传文件时遇到的一个问题:
正常情况下,上传文件后,传递的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中明明白白提到了:
代码中使用了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”**。