Скрепка:: ошибки:: 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 ответов:
начиная с
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 может быть указано, как показано в
Вариант 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/ }
нужно добавить 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