web-dev-qa-db-ja.com

Paperclip :: Errors :: MissingRequiredValidatorError with Rails 4

RailsブログアプリでPaperclipを使用してアップロードしようとすると、このエラーが発生します。 「MissingRequiredValidatorError」と表示されているときに何を参照しているのかわからない

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

Extracted source (around line #30):

def create
  @post = Post.new(post_params)

これは私の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    

これは私の投稿ヘルパーです

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

あなたが私を助けるために追加の資料を補うことができるかどうか私に知らせてください。

222
nadia

Paperclip version 4.0で始まるすべての添付ファイルには、content_type検証a file_name検証、または明示的にどちらも持たないことを述べます。

Paperclipは、これを何もしないとPaperclip::Errors::MissingRequiredValidatorErrorエラーを発生させます。

あなたの場合、次の行をPostモデルに追加できます。afterhas_attached_file :imageを指定します

オプション1:コンテンツタイプを検証する

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

-OR-別の方法

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

-OR-さらに別の方法

コンテンツタイプの検証にregexを使用することです。

例:すべての画像形式を検証するには、次のように正規表現を指定できます

@ LucasCaton's answer

オプション2:ファイル名を検証する

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

オプション3:検証しない

何らかの理由でcrazy理由(validになる可能性がありますが、今は考えられません)、追加したくない場合content_type検証を行い、人々がContent-Typesをスプーフィングし、サーバーに予期しないデータを受信できるようにしてから、次を追加します。

do_not_validate_attachment_file_type :image

注:

上記のcontent_type/matchesオプション内の要件に従ってMIMEタイプを指定します。始めにいくつかの画像MIMEタイプを指定しました。

参照:

確認する必要がある場合は、Paperclip:Security Validationsを参照してください。 :)

ここで説明されているなりすましの検証にも対処する必要があるかもしれません https://stackoverflow.com/a/23846121

490
Kirti Thorat

モデルに入れるだけです:

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

https://github.com/thoughtbot/Paperclip

18
Lucas Caton

モデルにvalidates_attachment_content_typeを追加する必要があります

レール

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

レール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

投稿モデルが次のようになっていることを確認してください...

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