1. ホーム
  2. ruby-on-rails

[解決済み】Rails 4でPaperclip::Errors::MissingRequiredValidatorErrorが発生する。

2022-04-06 07:39:44

質問

railsのブログアプリでpaperclipを使ってアップロードしようとすると、こんなエラーが出ます。 MissingRequiredValidatorError"と表示されていますが、何を指しているのかよくわかりません。 作成も更新もpost_paramsを使うので、post_paramsを更新して:imageを与えれば大丈夫だと思ったのですが。

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

余分な資料を補足することがあれば、教えてください。

解決方法は?

で始まる Paperclip version 4.0 すべての添付ファイルには content_type バリデーション , ファイル名の検証 に、または 明示的に は、どちらも持たないということを表明しています。

ペーパークリップの昇給 Paperclip::Errors::MissingRequiredValidatorError のいずれかを行わないとエラーになります。

あなたの場合、以下のいずれかの行を Post モデルで使用されます。 の後に 指定 has_attached_file :image

オプション 1: コンテンツの種類を検証する

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

-または別の方法

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

-または別の方法

を使用することです。 レジェックス を使用して、コンテンツタイプの検証を行います。

例えば すべての画像形式を検証するには、次のような正規表現を指定します。

LucasCatonの回答

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

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

オプション3: バリデーションを行わない

もし、いくつかの クレイジー の理由( 有効 を追加することはできませんが、今すぐには思いつきません)。 content_type の検証を行い、Content-Typesを詐称して、期待していないデータをサーバーに受信することを許可する場合は、次のように追加します。

do_not_validate_attachment_file_type :image


MIME タイプを要件に応じて content_type / matches のオプションは上記の通りです。 今、いくつかの画像のMIMEタイプをあげましたので、まずはそれをご覧ください。

参考にしてください。

参照先 ペーパークリップ セキュリティバリデーション もし、まだ確認が必要な場合は、こちらをご覧ください。)

また、こちらで説明されているなりすまし検証にも対応しなければならないかもしれません。 https://stackoverflow.com/a/23846121