पेपरलीक :: त्रुटियां :: रेलिंग के साथ मिसिंगरेलिविलेवडाल्टरएयर


226

मुझे यह त्रुटि तब हो रही है जब मैं अपने रेल ब्लॉगिंग ऐप के साथ पेपरक्लिप का उपयोग करके अपलोड करने का प्रयास करता हूं। यह सुनिश्चित नहीं है कि इसका संदर्भ क्या है जब यह कहता है "MissingRequiredValidatorError" मैंने सोचा कि post_params को अपडेट करके और इसे दे: छवि यह ठीक होगी, क्योंकि दोनों post_params का उपयोग करते हैं और अपडेट करते हैं

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

Extracted source (around line #30):

def create
  @post = Post.new(post_params)

यह मेरी पोस्ट्स_कंट्रोलर.आरबी है

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

कृपया मुझे बताएं कि क्या आप मेरी मदद करने के लिए अतिरिक्त सामग्री को पूरक कर सकते हैं।

जवाबों:


501

प्रारंभ में Paperclip version 4.0, सभी अनुलग्नकों में एक content_type सत्यापन , एक 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"] }

-ओआर- अभी तक एक और तरीका है

सामग्री प्रकार को मान्य करने के लिए regex का उपयोग करना है ।

उदाहरण के लिए: सभी छवि स्वरूपों को मान्य करने के लिए, रेगेक्स एक्सप्रेशन को निर्दिष्ट किया जा सकता है जैसा कि इसमें दिखाया गया है

@ लुकासकटन का जवाब

विकल्प 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/ अपनी आवश्यकता के अनुसार MIME प्रकार निर्दिष्ट करें matchesमैंने आपके साथ शुरुआत करने के लिए सिर्फ कुछ इमेज MIME टाइप दिए हैं।

संदर्भ:

यदि आप अभी भी सत्यापित करने की आवश्यकता है, तो पेपरक्लिप का संदर्भ लें : सुरक्षा मान्यताएँ । :)

Https://ofackoverflow.com/a/23846121 यहाँ बताई गई स्पूफिंग मान्यता से भी आपको निपटना पड़ सकता है


3
मान्यताओं को नई सहायक शैली का उपयोग करके भी परिभाषित किया जा सकता है, जैसे। validates_attachment :image, presence: true, content_type: { content_type: ["image/jpg", "image/jpeg", "image/png"] }
रॉनास्टैक

@rawonstack +1 विकल्प का सुझाव देने के लिए धन्यवाद। :) मैं एक छोटे से tweak के बाद जवाब में शामिल किया है। presence: trueसत्यापन अनिवार्य नहीं है, इसलिए मैंने उस हिस्से को बाहर कर दिया है।
कीर्ति थोराट

1
पीडीएफ फाइल अपलोड होने की स्थिति में पेपरक्लिप भी "मिसिंग आवश्यक वेलिडेटर त्रुटि" को फेंक देगा। इसके लिए समाधान यह है: पहले "घोस्टस्क्रिप्ट" को स्थापित करें और फिर "एप्लिकेशन / पीडीएफ" को सामग्री-प्रकार में जोड़ें।
हैकरकर्मा

मैं वास्तव में सिफारिश नहीं करेंगे do_not_validate_attachment_file_type । जैसा कि Rdocs यह कहती है: Egor Homakov की एक रिपोर्ट की बदौलत हमने लोगों को कंटेंट-टाइप को ख़राब करने से रोकने के लिए कदम उठाए हैं और ऐसे डेटा प्राप्त किए हैं जिनकी आप अपने सर्वर पर उम्मीद नहीं कर रहे थे।
user1322092

3
सामग्री सत्यापन न करने का मेरा पागल कारण यह है कि अनुलग्नक उपयोगकर्ताओं द्वारा नहीं बनाया गया है, बल्कि एक सिस्टम प्रक्रिया द्वारा बनाया गया है। पेपर 3 S3 स्टोरेज के लिए सुविधा परत है।
s01ipsist


4

मॉडल में 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

रेलें ४

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

1
यह जानने के लिए अच्छा है @zire
अरविंद सिंह 15

0

सुनिश्चित करें कि आपका पोस्ट मॉडल इस तरह दिखता है ...

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

-1

मुझे इनमें से कोई भी समाधान काम करने के लिए नहीं मिला। मैंने पेपरक्लिप 3.1 की कोशिश की, लेकिन तब मेरा ऐप मुझे बताता रहा कि मेरी इमेज फाइल एक्सटेंशन स्वीकृत नहीं थे, भले ही वे jpg थे।

मुझे अंत में संस्करण 3.5.1 के साथ सफलता मिली।


इसलिए यह कहना चाहता हूं कि संस्करण को अपग्रेड करके इस समस्या को खत्म किया जा सकता है
धर्मेश पोरवाल

की तरह। मैंने नवीनतम संस्करण के साथ शुरुआत की, जो अभी 4.2.1 है। वहां कोई किस्मत नहीं, फिर 3.1 के साथ कोई किस्मत नहीं (जो मुझे यहां सुझाया गया है)। किसी और ने कहीं (मुझे याद नहीं है जहां) ने 3.5.1 का सुझाव दिया, और यह मेरे लिए काम किया।
रिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.