Загрузка файлов на rails 4.0 с помощью paperclip и simple_form

Изменить:, как сказал @Justin, я, вероятно, испортил это, пытаясь найти решение, даже не осознавая, oopsy... Изменение параметров paramsrequire (: pin).permit(: image,: description). Хотя это не работает сейчас, потому что я получаю "имеет расширение, которое не соответствует его содержимому.

Я следую Rails One Month и пытаюсь загрузить изображение в рабочие леса. Я использую 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>
 

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

pin_params от pins_controller.rb

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

(большинство из них - это когда я пытался устранить неполадки с помощью paperclip README). Всякий раз, когда я загружаю файл, я получаю сообщение об ошибке

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

и если я попытаюсь использовать params.require для чего-то, я получаю сообщение об ошибке, в котором параметр param не найден. Я понятия не имею, что это вызывает. Если я удалю метод pin_params, поля формы просто вернутся "не могут быть пустыми" независимо от того, что в них "
Это кажется простым, но я просто не могу найти решение для этого

Ответ 1

У Paperclip есть подтверждение подмены, чтобы гарантировать, что содержимое файла действительно соответствует расширению. Эта проверка выполняется частично с помощью команды file операционной системы для определения содержимого файла. К сожалению, Windows не имеет команды file, поэтому проверка всегда будет неудачной.

Чтобы обойти это, вы должны отключить спуфинг. Создайте инициализатор со следующим кодом:

module Paperclip
  class MediaTypeSpoofDetector
    def spoofed?
      false
    end
  end
end

Допустимо оставить валидатор validates_attachment_content_type, хотя, поскольку он по-прежнему является лучшим способом ограничить типы файлов, которые пользователь может загрузить. Вам просто нужно отключить бит spoofing этой проверки.