224 votes

Paperclip::Errors::MissingRequiredValidatorError avec Rails 4

J'espère que quelqu'un peut m'aider J'obtiens cette erreur quand j'essaie de télécharger en utilisant un trombone avec mes rails application de blogs. Pas sûr de ce qu'il se réfère quand il dit "MissingRequiredValidatorError" Je pensais qu'en mettant à jour post_params et de le donner :image de ce qu'il serait bien, comme à la fois de créer et de mettre à jour l'utilisation 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)

et c'est mes messages helper

 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.

494voto

Kirti Thorat Points 21330

En commençant par Paperclip version 4.0, toutes les pièces jointes sont tenus d'inclure une content_type de validation, un file_name de validation, ou explicitement état qu'ils ne vont pas en avoir non plus.

Trombone soulève Paperclip::Errors::MissingRequiredValidatorError d'erreur si vous ne le faites pas tout cela.

Dans votre cas, vous pouvez ajouter la ligne suivante à votre Post modèle, après la spécification has_attached_file :image

Option 1: validation de type de contenu

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

-OU - une autre façon

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

-OU - encore une autre façon

est d'utiliser des regex pour la validation de type de contenu.

Par exemple: Pour valider tous les formats d'image, expression regex peut être spécifié comme indiqué dans

@LucasCaton réponse

Option 2: validation de nom de fichier

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

Option 3: Ne pas valider

Si pour une folle raison (peut-être valable , mais je n'en pense pas un seul pour le moment), vous ne souhaitez pas ajouter de tout content_type de validation et de permettre aux gens d'usurper l'identité des Types de Contenu et de recevoir des données vous ne vous attendiez pas sur votre serveur, puis ajoutez la ligne suivante:

do_not_validate_attachment_file_type :image

Note:

Spécifier les types MIME selon vos besoins au sein de content_type/ matches options ci-dessus. J'ai juste donné un peu d'image des types MIME pour vous de commencer avec.

Référence:

Reportez-vous à Trombone: la Sécurité des Validations, si vous avez encore besoin de vérifier. :)

19voto

Lucas Caton Points 140

Il suffit de mettre votre modèle:

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

https://github.com/thoughtbot/paperclip

-1voto

Ronaldoh1 Points 11

Hey les gars, j'ai récemment eu cette erreur. J'ai essayé les solutions présentées ci-dessus et aucune d'elles n'a fonctionné. La meilleure façon de le faire est de déclasser trombone à 3.1. Il semble que ce soit un problème continu pour la version 4.2 de cette gemme.

espérons que cela aide quelqu'un là-bas

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X