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

Nes*_*cio 5 ruby-on-rails ruby-on-rails-4

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

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

_pin_form.erb.html

<%= simple_form_for(@pin, :html => {:multipart => true}) do |f| %>
 <%= f.error_notification %>

 <div class="form-inputs">
   <%= f.file_field :image, :label => "Upload an image" %>
   <%= f.input :description, as: :text %>
 </div>

 <div class="form-actions">
   <%= f.button :submit %>
 </div>
Run Code Online (Sandbox Code Playgroud)

pin.rb

class Pin < ActiveRecord::Base

 has_attached_file :image
 belongs_to :user

 validates :description, :presence => 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
Run Code Online (Sandbox Code Playgroud)

pin_params来自pins_controller.rb

def pin_params
  params.permit(:description, :image)
end
Run Code Online (Sandbox Code Playgroud)

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

ActionController::ParameterMissing in PinsController#create
param not found: image
Run Code Online (Sandbox Code Playgroud)

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

小智 9

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

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

module Paperclip
  class MediaTypeSpoofDetector
    def spoofed?
      false
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

离开validates_attachment_content_type验证器是有效的,因为它仍然是限制用户可以上传的文件类型的最佳方式.您只需要禁用此验证的欺骗位.