Paperclip::Errors:: MissingRequiredValidatorError con Rails 4


Recibo este error cuando intento cargar usando paperclip con mi aplicación rails blogging. No estoy seguro de a qué se refiere cuando dice " MissingRequiredValidatorError" Pensé que al actualizar post_params y darle: imagen estaría bien, ya que tanto crear como actualizar el uso 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 de mensajes

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

Por favor, hágamelo saber si puedo complementar material adicional para ayudarle a ayudarme.

Author: messanjah, 2014-02-20

5 answers

Empezando Paperclip version 4.0, todos los archivos adjuntos son necesarios para incluir un content_type de validación, un file_name validación, o explícitamente estado que no van a tener ambos.

Paperclip genera Paperclip::Errors::MissingRequiredValidatorError error si no haces nada de esto.

En su caso, puede agregar cualquiera de las siguientes líneas a su modelo Post, después de especificando 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 - otro way

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

-O - de otra manera

Es usar regex para validar el tipo de contenido.

Por ejemplo: Para validar todos los formatos de imagen, la expresión regex se puede especificar como se muestra en

@Respuesta de LucasCaton

Opción 2: Validar el nombre del 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 puedo pensar en una ahora mismo), no desea agregar ninguna validación content_type y permitir a las personas falsificar Tipos de Contenido y recibir datos que no esperaba en su servidor, luego agregue lo siguiente:

do_not_validate_attachment_file_type :image

Nota:

Especifique los tipos MIME según su requisito dentro content_type/ matches opciones anteriores. Acabo de dar algunos tipos de MIME de imagen para empezar.

Referencia:

Refiérase a Paperclip: Validaciones de seguridad , si todavía necesita verificar. :)

Es posible que también tenga que lidiar con la validación de suplantación explicada aquí https://stackoverflow.com/a/23846121

 483
Author: Kirti Thorat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:23

Simplemente pon tu modelo:

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

Https://github.com/thoughtbot/paperclip

 17
Author: Lucas Caton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-06 14:07:58

Necesita agregar validates_attachment_content_type en el modelo

Rails 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
Author: Arvind singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-02 13:32:09

Asegúrate de que tu modelo post 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
 0
Author: shriyog,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-11 06:07:29

Tampoco pude conseguir que ninguna de estas soluciones funcionara. Probé Paperclip 3.1, pero no pude entonces mi aplicación seguía diciéndome que mis extensiones de archivo de imagen no estaban aprobadas, a pesar de que eran jpg.

Finalmente encontré éxito con la versión 3.5.1.

 -1
Author: Ric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-27 05:49:30