使用paperclip和simple_form将文件上传到rails 4.0

编辑:正如@Justin说的那样,当我试图找到一个没有意识到的解决方案时,我可能会搞砸了,oopsy ……将params更改为params.require(:pin).permit(:image,:description)确实解决了它。
虽然它现在不起作用,因为我得到一个“有一个与其内容不匹配的扩展名。

我正在关注一个月的Rails并尝试将上传图片放入脚手架工作中。 我正在使用paperclip文件和simple_form。 这是我认为相关的代码(随意提出要求):

_pin_form.erb.html

 {:multipart => true}) do |f| %>  
"Upload an image" %>

pin.rb

 class Pin  true validates :user_id, :presence => true validates_attachment :image, :presence => true # Validate content type validates_attachment_content_type :image, :content_type => /\Aimage/ # Validate filename validates_attachment_file_name :image, :matches => [/png\Z/, /jpe?g\Z/] # Explicitly do not validate do_not_validate_attachment_file_type :image end 

pin_params来自pins_controller.rb

 def pin_params params.permit(:description, :image) end 

(大多数是我尝试通过回形针README进行故障排除时)。 每当我上传文件时,我都会收到错误消息

 ActionController::ParameterMissing in PinsController#create param not found: image 

如果我尝试使用params.require的东西,我会收到一个错误,说没有找到param。 我不知道是什么导致了它。 如果我删除pin_params方法,表单字段只返回“不能为空”,无论它们是什么“
这看起来很简单但我找不到解决方案

Paperclip具有欺骗validation,以确保文件的内容实际上与扩展名匹配。 通过使用操作系统的file命令来确定文件内容,部分地实现了该validation。 不幸的是,Windows没有file命令,因此validation将始终失败。

要解决此问题,您应该禁用欺骗。 使用以下代码创建初始化程序:

 module Paperclip class MediaTypeSpoofDetector def spoofed? false end end end 

保留validates_attachment_content_type器是有效的,因为它仍然是限制用户可以上载的文件类型的最佳方式。 您只需要禁用此validation的欺骗位。