Paperclip:: Errors:: MissingRequiredValidatorError с Rails 4
Я получаю эту ошибку, когда пытаюсь загрузить с помощью paperclip с помощью своего приложения для блогов в rails.
Не уверен, что это значит, когда говорится "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)
Это мой post_controller.rb
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
Пожалуйста, дайте мне знать, если я могу дополнить дополнительные материалы, чтобы помочь вам помочь.
Ответы
Ответ 1
Начиная с 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"]
-OR- другой способ
validates_attachment :image, content_type: { content_type: ["image/jpg", "image/jpeg", "image/png", "image/gif"] }
-OR- еще один способ
- использовать регулярное выражение для проверки типа содержимого.
Например: для проверки всех форматов изображений выражение регулярного выражения может быть указано, как показано в
@LucasCaton answer
Вариант 2: подтверждение имени файла
validates_attachment_file_name :image, :matches => [/png\Z/, /jpe?g\Z/, /gif\Z/]
Вариант 3: Не проверять
Если по какой-то сумасшедшей причине (может быть допустимой, но я не могу сейчас думать об этом), вы не хотите добавлять валидацию content_type
и позволять людям обманывать Content-Types и получать данные, которые вы не ожидали затем добавьте следующий сервер:
do_not_validate_attachment_file_type :image
Примечание:
Укажите типы MIME в соответствии с вашими требованиями в content_type
/matches
выше.. Я только что дал несколько типов изображений MIME для начала.
Справка:
Обратитесь к Скрепка: проверка безопасности, если вам все еще нужно проверить.:)
Возможно, вам также придется иметь дело с проверкой подмены паролей, описанной здесь fooobar.com/questions/32080/...
Ответ 2
Просто введите свою модель:
validates_attachment :image, content_type: { content_type: /\Aimage\/.*\Z/ }
https://github.com/thoughtbot/paperclip
Ответ 3
Вам нужно добавить validates_attachment_content_type в Model
Рельсы 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
Rails 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
Ответ 4
Убедитесь, что ваша модель публикации выглядит так:
class Post < ActiveRecord::Base
has_attached_file :photo
validates_attachment_content_type :photo, :content_type => ["image/jpg", "image/jpeg", "image/png", "image/gif"]
end
Ответ 5
Я не мог заставить любое из этих решений работать. Я попробовал Paperclip 3.1, но не смог, чтобы мое приложение постоянно говорило мне, что мои расширения файлов изображений не были одобрены, хотя они были jpg.
Наконец-то я нашел успех с версией 3.5.1.