Скрепка:: ошибки:: MissingRequiredValidatorError с рельсами 4


Я получаю эту ошибку,когда я пытаюсь загрузить с помощью скрепки с моим приложением rails blogging. Не уверен, что он имеет в виду, когда он говорит " MissingRequiredValidatorError" Я думал, что, обновляя post_params и давая ему: изображение было бы хорошо, так как и создание, и обновление используют post_params

Paperclip::Errors::MissingRequiredValidatorError in PostsController#create
Paperclip::Errors::MissingRequiredValidatorError

Extracted source (around line #30):

def create
  @post = Post.new(post_params)

Это мой posts_controller.РБ

def update
  @post = Post.find(params[:id])

  if @post.update(post_params)
    redirect_to action: :show, id: @post.id
  else
    render 'edit'
  end
end

def new
  @post = Post.new
end

def create
  @post = Post.new(post_params)

  if @post.save
    redirect_to action: :show, id: @post.id
  else
    render 'new'
  end
end
#...

private

def post_params
  params.require(:post).permit(:title, :text, :image)
end    

а это мой пост помощник

module PostsHelper
  def post_params
    params.require(:post).permit(:title, :body, :tag_list, :image)
  end
end

пожалуйста, дайте мне знать, если я могу дополнить дополнительный материал чтобы помочь тебе помочь мне.

5 216

5 ответов:

начиная с Paperclip version 4.0, все вложения должны включать в себя проверка content_type,проверка имени файла или явно государство, которое они не имели.

скрепки поднимает Paperclip::Errors::MissingRequiredValidatorError ошибка, если вы не делаете ничего из этого.

в вашем случае, вы можете добавить следующую строку Post модель после задание has_attached_file :image

Вариант 1: Проверка типа контента

validates_attachment_content_type :image, :content_type => ["image/jpg", "image/jpeg", "image/png", "image/gif"]

- или-по-другому

validates_attachment :image, content_type: { content_type: ["image/jpg", "image/jpeg", "image/png", "image/gif"] }

-или - еще один способ

использовать выражение для проверки типа контента.

например: чтобы проверить все форматы изображений, выражение regex может быть указано, как показано в

@LucasCaton ответ

Вариант 2: Проверка имя файла

validates_attachment_file_name :image, :matches => [/png\Z/, /jpe?g\Z/, /gif\Z/]

Вариант 3: не проверять

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

do_not_validate_attachment_file_type :image

Примечание:

укажите типы MIME в соответствии с вашим требование в пределах content_type/matches выше вариантов. я только что дал несколько типов изображений MIME для вас, чтобы начать С.

ссылки:

смотрите Скрепка: Проверка Безопасности, если вам все еще нужно проверить. :)

возможно, Вам также придется иметь дело с проверкой спуфинга, описанной здесь https://stackoverflow.com/a/23846121

просто поместите в свою модель:

validates_attachment :image, content_type: { content_type: /\Aimage\/.*\Z/ }

https://github.com/thoughtbot/paperclip

нужно добавить validates_attachment_content_type модель

рельсы 3

class User < ActiveRecord::Base
attr_accessible :avatar
has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => "/images/:style/missing.png"
validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/ 
end

рельсы 4

class User < ActiveRecord::Base
has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => "/images/:style/missing.png"
validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/
end

убедитесь, что ваша почтовая модель выглядит так...

class Post < ActiveRecord::Base
    has_attached_file :photo
    validates_attachment_content_type :photo, :content_type => ["image/jpg", "image/jpeg", "image/png", "image/gif"]
end

Я не мог заставить ни одно из этих решений работать либо. Я попробовал Paperclip 3.1, но не смог тогда мое приложение продолжало говорить мне, что мои расширения файлов изображений не были одобрены, хотя они были jpg.

Я наконец-то нашел успех с версией 3.5.1.