ruby on rails - thoughtbot - Paperclip:: Errors:: MissingRequiredValidatorError with Rails 4
paperclip validates (5)
A partir de la Paperclip version 4.0
, se requiere que todos los archivos adjuntos incluyan una validación de tipo de contenido , una validación de nombre de archivo o que declaren explícitamente que tampoco van a tener.
Paperclip genera el Paperclip::Errors::MissingRequiredValidatorError
si no hace nada de esto.
En su caso, puede agregar cualquiera de las siguientes líneas a su modelo de Post
, luego de especificar has_attached_file :image
Opción 1: validar el tipo de contenido
validates_attachment_content_type :image, :content_type => ["image/jpg", "image/jpeg", "image/png", "image/gif"]
-O- otra manera
validates_attachment :image, content_type: { content_type: ["image/jpg", "image/jpeg", "image/png", "image/gif"] }
-O- otra manera
es utilizar expresiones regulares para validar el tipo de contenido.
Por ejemplo: para validar todos los formatos de imagen, la expresión de expresiones regulares se puede especificar como se muestra en
Opción 2: validar nombre de archivo
validates_attachment_file_name :image, :matches => [/png/Z/, /jpe?g/Z/, /gif/Z/]
Opción 3: no validar
Si por alguna razón loca (puede ser válida pero no se me ocurre una ahora), no desea agregar ninguna validación de tipo de contenido y permitir que las personas falsifiquen tipos de contenido y reciban datos que no esperaba en su servidor, luego agregue el siguiendo:
do_not_validate_attachment_file_type :image
Nota:
Especifique los tipos MIME según sus requisitos dentro de las opciones de tipo de contenido / matches
anteriores. Acabo de dar algunos tipos MIME de imagen para que comiences.
Referencia:
Consulte Paperclip: Validaciones de seguridad , si aún necesita verificar. :)
También es posible que tenga que lidiar con la validación de suplantación explicada aquí https://stackoverflow.com/a/23846121
Recibo este error cuando intento cargar con un clip de papel con mi aplicación de blogs de Rails. No estoy seguro de a qué se refiere cuando dice "MissingRequiredValidatorError" Pensé que al actualizar post_params y darle: image estaría bien, ya que tanto la creación como la actualización usan post_params
Paperclip::Errors::MissingRequiredValidatorError in PostsController#create
Paperclip::Errors::MissingRequiredValidatorError
Extracted source (around line #30):
def create
@post = Post.new(post_params)
Este es mi posts_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
y este es mi ayudante posts
module PostsHelper
def post_params
params.require(:post).permit(:title, :body, :tag_list, :image)
end
end
Por favor, avíseme si puedo complementar material adicional para ayudarlo a ayudarme.
Asegúrate de que tu modelo de publicación se vea así ...
class Post < ActiveRecord::Base
has_attached_file :photo
validates_attachment_content_type :photo, :content_type => ["image/jpg", "image/jpeg", "image/png", "image/gif"]
end
Necesidad de agregar validates_attachment_content_type en el modelo
Rieles 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
Rieles 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
Solo ponlo en tu modelo:
validates_attachment :image, content_type: { content_type: //Aimage//.*/Z/ }
Tampoco pude conseguir que ninguna de estas soluciones funcionara. Probé con Paperclip 3.1, pero no pude entonces que mi aplicación me siguiera diciendo que mis extensiones de archivo de imagen no estaban aprobadas, a pesar de que eran jpg.
Finalmente encontré el éxito con la versión 3.5.1.