Paperclip:: Errors:: MissingRequiredValidatorError with Rails 4

Dostaję ten błąd, gdy próbuję przesłać za pomocą paperclip z moją aplikacją do blogowania rails. Nie wiem, Do czego się odnosi, gdy mówi " MissingRequiredValidatorError" Pomyślałem, że aktualizując post_params i dając mu: image, będzie dobrze, ponieważ zarówno create, jak i update używają post_params

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

Extracted source (around line #30):

def create
  @post = Post.new(post_params)

To jest mój 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    

A to moje posty

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

Proszę dać mi znać, jeśli mogę uzupełnić dodatkowy materiał, aby pomóc ci mi pomóc.

Author: messanjah, 2014-02-20

5 answers

Począwszy od Paperclip version 4.0, wszystkie załączniki muszą zawierać walidację content_type, Walidacja nazw plików, lub jawnie stwierdzają, że nie będą mieć ani jednego, ani drugiego.

Spinacz podnosi Paperclip::Errors::MissingRequiredValidatorError Błąd, jeśli tego nie zrobisz.

W Twoim przypadku możesz dodać dowolną z następujących linii do modelu Post, Po określając has_attached_file :image

Opcja 1: zweryfikuj typ treści

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

-lub-inny sposób

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

-OR-yet another way

Jest użycie regex do walidacji typu zawartości.

Na przykład: aby zweryfikować wszystkie formaty obrazu, wyrażenie regex może być określone w sposób pokazany w

@odpowiedź Lucascatona

Opcja 2: zweryfikuj nazwę pliku

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

Opcja 3: nie sprawdzaj poprawności

If for some crazy reason (can be valid but I cannot think of one right now), nie chcesz dodawać żadnych walidacji content_type i zezwalać ludziom na fałszowanie typów treści i odbieranie danych, których nie spodziewałeś się na swoim serwerze, dodaj następujące:

do_not_validate_attachment_file_type :image

Uwaga:

Określ typy MIME zgodnie z wymaganiami w content_type/ matches opcje powyżej. na początek podałem kilka typów mimów obrazów.

Numer referencyjny:

Zobacz Paperclip: walidacje zabezpieczeń , jeśli nadal musisz to zweryfikować. :)

Możesz również mieć do czynienia z walidacją spoofingu wyjaśnioną tutaj https://stackoverflow.com/a/23846121

 483
Author: Kirti Thorat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:23

Wpisz swój model:

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

Https://github.com/thoughtbot/paperclip

 17
Author: Lucas Caton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-06 14:07:58

Należy dodać validates_attachment_content_type w modelu

Rails 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

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
 4
Author: Arvind singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-02 13:32:09

Upewnij się, że twój model post wygląda tak...

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
Author: shriyog,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-11 06:07:29

Ja też nie mogłem uruchomić żadnego z tych rozwiązań. Próbowałem Paperclip 3.1, ale nie mogłem wtedy moja aplikacja powtarzała mi, że moje rozszerzenia plików graficznych nie zostały zatwierdzone, mimo że były jpg.

W końcu znalazłem sukces z wersją 3.5.1.

 -1
Author: Ric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-27 05:49:30