2016-12-14 8 views
5

मैं कैरियरवेव द्वारा अपलोड की गई छवियों को फसल करने की क्षमता को पार कर रहा हूं। यहां RailsCast video on Youtube है जिसका मैं अनुसरण कर रहा हूं।अपरिभाषित विधि `mark_for_destruction? ' कैरियरवेव, आरएमएजी

लेकिन अपलोडर में RMagick सहित के बाद, मैंने प्राप्त किया:

undefined method `marked_for_destruction?' for #<ImageUploader:0x007fe86634fcf0> 

क्या एक बिल्ली इस मैंने सोचा है। मैंने इस विधि को कहीं भी नहीं बुलाया है। लेकिन अगर यह परिभाषित नहीं किया गया है, तो इसे परिभाषित करने दें! और यह काम किया! लेकिन बाद में मैंने इस विधि के बारे में और अधिक जांच की और पाया कि यह सक्रिय रिकॉर्ड ऑटोसेव एसोसिएशन मॉड्यूल में बनाया गया है। और डॉक्स, इस विधि के बारे से:

रिटर्न या नहीं, इस रिकॉर्ड माता-पिता के हिस्से के रूप नष्ट हो जाएगा लेन-देन को बचाने के।

केवल उपयोगी अगर: माता-पिता पर ऑटोसवे विकल्प इस संबंधित मॉडल के लिए सक्षम है।

लेकिन मैंने autosave: true किसी भी ऑब्जेक्ट को पास नहीं किया!

तो, मेरा पहला सवाल - क्या यह डिफ़ॉल्ट रूप से किया गया था?

2 - रेलस्कास्ट ट्यूटोरियल पर उन्होंने इस विधि को परिभाषित नहीं किया। मुझे क्यों करना पड़ा

3 - मैं अपना कोड बोले पास करता हूं। कोई त्रुटि?

4 - यदि संभव हो, तो क्या कोई यह समझा सकता है कि यह प्रक्रिया सामान्य रूप से कैसे काम करती है?

बहुत धन्यवाद!

product.rb:

has_one :image 
    validates :image, presence: true 
    mount_uploader :image, ImageUploader 

products_controller.rb:

def create 
    @product = Product.new(product_params) 
    @product.category_id = params[:category_id] 
    @product.user_id = current_user.id 

    respond_to do |format| 
     if @product.save 
     if params[:product][:image].present? 
      format.html { render :crop } 
     else 
      format.html { redirect_to @product, notice: 'Product was successfully created.' } 
      format.json { render :show, status: :created, location: @product } 
     end 
     else 
     format.html { render :new } 
     format.json { render json: @product.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

image_uploader.rb:

class ImageUploader < CarrierWave::Uploader::Base 

    include CarrierWave::RMagick 

    def marked_for_destruction? 
    @marked_for_destruction 
    end 

    def mark_for_destruction 
    @marked_for_destruction = true 
    end 

    storage :file 

    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 

    version :large do 
    resize_to_limit(600,600) 
    end 
end 

उत्तर

0

आप उपयोग कर रहे हैं रेल 5:

ओपन ऊपर new_framework_defaults.rb और परिवर्तन:

Rails.application.config.active_record.belongs_to_required_by_default = true 

को
Rails.application.config.active_record.belongs_to_required_by_default = false 
+0

धन्यवाद, आप लिख है कि यह द्वारा अपने जवाब को बेहतर बना सकते क्योंकि Rails5 'आवश्यक' डिफ़ॉल्ट रूप से TRUE' और यह कैसे से संबंधित है के लिए सेट झंडा belongs_to' मेरी समस्या मैं शर्त लगाता हूं कि लोग इसके लिए आभारी होंगे। मैं अब उस परियोजना पर काम नहीं कर रहा हूं, इसलिए इसे आसानी से जांच नहीं सकते –

संबंधित मुद्दे