使用回形针进行内容类型validation失败

我正在尝试使用paperclip上传应该具有mime类型audio/x-mod .xm文件。 我通过设置以下选项配置回形针以允许此配置:

 Paperclip.options[:content_type_mappings] = { xm: "audio/x-mod" } 

附件字段的validation如下所示:

 validates_attachment :song, presence: true, content_type: { content_type: ["audio/x-mod"] }, size: { in: 0..128.kilobytes } 

每当我尝试上传具有mime类型audio/x-mod回形针的.xm文件时,我都会收到错误Song content type is invalid 。 当我将有效内容类型指定为[/.+/]时,它可以正常工作。

我错过了什么吗? 这可能是回形针如何检查内容类型的错误吗? 有没有办法看到回形针认为文件的内容类型是什么?

 Started POST "/mods" for 127.0.0.1 at 2014-08-02 11:28:56 +0200 Processing by ModsController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"FhBvyd8jOapcjONk8kyOgGE/oOZPA+sDBJxr/w3zUG0=", "mod"=>{"title"=>"Girl Next Door", "release(1i)"=>"2014", "release(2i)"=>"8", "release(3i)"=>"2", "song"=>#<ActionDispatch::Http::UploadedFile:0x00000000e763c8 @tempfile=#, @original_filename="Wiklund_-_Girl_next_door.xm", @content_type="audio/x-xm", @headers="Content-Disposition: form-data; name=\"mod[song]\"; filename=\"Wiklund_-_Girl_next_door.xm\"\r\nContent-Type: audio/x-xm\r\n">}, "commit"=>"Save"} Command :: file -b --mime '/tmp/d437374435a48a211b1f7b9e585c4c2d20140802-1742-1259ddt.xm' (0.1ms) begin transaction Command :: file -b --mime '/tmp/d437374435a48a211b1f7b9e585c4c2d20140802-1742-1e5e5sn.xm' 

我认为您的内容类型validation应如下所示:

 validates_attachment_content_type : song, :content_type => /\Aaudio/ 

要么

 validates_attachment_content_type :song, :content_type => /^audio\/(x-xm)/ 

从log content_type="audio/x-xm" ,对于内容类型validationPaperclip使用regexp你可以在rubular中检查这个