IT story

클립 : : 오류 : : 누락 요구 사항 유효성 검사기 레일 4 오류

hot-time 2020. 4. 20. 20:30
반응형

클립 : : 오류 : : 누락 요구 사항 유효성 검사기 레일 4 오류


Rails 블로그 앱에서 클립을 사용하여 업로드하려고하면이 오류가 발생합니다. "MissingRequiredValidatorError"라고 말할 때 무엇을 참조하는지 모르겠습니다. post_params를 업데이트하고 : image를 제공하면 post_params를 만들고 업데이트 할 때 괜찮습니다.

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, 모든 첨부 파일이 포함하는 데 필요한 콘텐츠 _ 검증 , FILE_NAME 검증 , 또는에 명시 적으로 그들 중 하나를해야 할 것하지 않을 것을 상태.

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다음을 추가 한 후 서버에 당신이 기대하지 않은 데이터를 확인 및 스푸핑 콘텐츠 유형에 사람들을 허용 및 수신 :

do_not_validate_attachment_file_type :image

노트 :

위의 content_type/ matches옵션 내에서 요구 사항에 따라 MIME 유형을 지정하십시오 . 나는 당신이 시작할 수 있도록 몇 가지 이미지 MIME 유형을 제공했습니다.

참고:

여전히 확인해야하는 경우 클립 : 보안 유효성 검사를 참조하십시오 . :)

https://stackoverflow.com/a/23846121에 설명 된 스푸핑 유효성 검사를 처리해야 할 수도 있습니다.


모델에 넣으십시오.

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

https://github.com/thoughtbot/paperclip


모델 validates_attachment_content_type 을 추가해야합니다.

레일 3

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

게시물 모델이 다음과 같은지 확인하십시오.

class Post < ActiveRecord::Base
    has_attached_file :photo
    validates_attachment_content_type :photo, :content_type => ["image/jpg", "image/jpeg", "image/png", "image/gif"]
end

이 솔루션 중 어느 것도 작동하지 못했습니다. Paperclip 3.1을 사용해 보았지만 응용 프로그램에서 이미지 파일 확장자가 jpg 인 경우에도 승인되지 않았다고 계속 알려주지 못했습니다.

마침내 버전 3.5.1에서 성공했습니다.

참고 URL : https://stackoverflow.com/questions/21897725/papercliperrorsmissingrequiredvalidatorerror-with-rails-4

반응형