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.
À 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
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
validates_attachment_file_name :image, :matches => [/png\Z/, /jpe?g\Z/, /gif\Z/]
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
Il suffit de mettre dans votre modèle:
validates_attachment :image, content_type: { content_type: /\Aimage\/.*\Z/ }
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
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