web-dev-qa-db-fra.com

Paperclip :: Errors :: MissingRequiredValidatorError avec Rails 4

Je reçois cette erreur lorsque j'essaye de télécharger à l'aide de Paperclip avec mon application de blogging Rails. Ne sachant pas à quoi il fait référence quand il est écrit "MissingRequiredValidatorError", j'ai pensé qu'en mettant à jour post_params et en lui donnant: image, tout irait bien, car créer et mettre à jour à la fois post_params

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

Extracted source (around line #30):

def create
  @post = Post.new(post_params)

C'est mon 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    

et ceci est mon assistant de messages

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

S'il vous plaît laissez-moi savoir si je peux compléter le matériel supplémentaire pour vous aider à m'aider.

222
nadia

À partir de Paperclip version 4.0, toutes les pièces jointes doivent inclure un validation de type de conten, ne validation de nom de fichier, ou pour explicitement ​​indiquer qu'elles ' ne va pas avoir non plus.

Le trombone déclenche l'erreur Paperclip::Errors::MissingRequiredValidatorError si vous ne le faites pas.

Dans votre cas, vous pouvez ajouter l’une des lignes suivantes à votre modèle Post, après en spécifiant has_attached_file :image

Option 1: Valider le type de contenu

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

- OU - d'une autre manière

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

- OU encore une autre manière

est d'utiliser regex pour valider le type de contenu.

Par exemple: Pour valider tous les formats d’image, vous pouvez spécifier l’expression regex comme indiqué dans

réponse de LucasCaton

Option 2: valider le nom de fichier

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

Option 3: ne pas valider

Si pour une raison folle (peut être valide mais je ne peux pas en penser à une pour le moment), vous ne souhaitez pas ajouter de validation content_type et permettre aux utilisateurs de spoofez Content-Types et recevez des données que vous n'attendiez pas sur votre serveur, puis ajoutez ce qui suit:

do_not_validate_attachment_file_type :image

Remarque:

Spécifiez les types MIME selon vos besoins dans les options content_type/matches ci-dessus. Je viens de donner quelques types d'image MIME pour vous pour commencer.

Référence:

Reportez-vous à Paperclip: Validations de sécurité, si vous devez toujours vérifier. :)

Vous devrez peut-être également traiter de la validation d'usurpation d'identité expliquée ici https://stackoverflow.com/a/23846121

491
Kirti Thorat

Il suffit de mettre dans votre modèle:

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

https://github.com/thoughtbot/Paperclip

18
Lucas Caton

Besoin d'ajouter validates_attachment_content_type dans le modèle

Rails

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
Arvind singh

Assurez-vous que votre modèle de poste ressemble à ceci ...

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
shriyog