我有一个由多部分文件(我通过dropzone.js获取)的文件构成的哈希:
uploaded_pics = params[:file]
然后我确定允许的图片的数量,用户可以上传availableimages
表示的整数。
最后,我尝试通过检索哈希availableimages
的第一个uploaded_pics
来获取第一个允许的哈希元素以及以下位:
selectedpics = p Hash[uploaded_pics.sort_by { |k,v| -v }[0..availableimages]]
selectedpics = p uploaded_pics.first(availableimages).to_h
selectedpics = Hash[uploaded_pics.to_a[1..availableimages]]
selectedpics = uploaded_pics.keys.sort[1..availableimages].each { |key| puts "#{key} #{hash[key]}" }
selectedpics = uploaded_pics.first(5)
但都失败了。
我认为其中一些尝试尝试将哈希转换为数组;这是不可能的,因为哈希元素不是简单的整数而是文件。有些因其他原因而失败(转换为_a等......)
我会在客户端进行测试,但我也希望在控制器端进行测试!那么我需要一种方法来只选择哈希的n个第一个元素,并保持对不变...
编辑
不确定这是否有帮助,但是当我尝试上传两个随机文件时,这是params:[file]
返回的哈希:
<ActionController::Parameters
{"0"=>#<ActionDispatch::Http::UploadedFile:0x13ca7678 @tempfile=#<Tempfile:C:/Users/Maxence/AppData/Local/Temp/RackMultipart20170616-8024-ks1b8u.jpg>, @original_filename="4.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"file[0]\"; filename=\"4.jpg\"\r\nContent-Type: image/jpeg\r\n">,
"1"=>#<ActionDispatch::Http::UploadedFile:0x13ca7648 @tempfile=#<Tempfile:C:/Users/Maxence/AppData/Local/Temp/RackMultipart20170616-8024-1ut7trw.jpg>, @original_filename="4.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"file[1]\"; filename=\"4.jpg\"\r\nContent-Type: image/jpeg\r\n">} permitted: false>
答案 0 :(得分:3)
这应该有用。
n_keys = uploaded_pics.keys.first(availableimages)
filtered_pics = uploaded_pics.slice(*n_keys)
答案 1 :(得分:0)
在分配变量
时不要使用OD-
p