سؤال

لقد كنت أستخدم Attachment_fu في مشروع لفترة طويلة وكان كل شيء على ما يرام ولكن الآن أحاول جلب المشروع إلى القضبان 2.3.3 أعاني من علة غريبة يقودني إلى المكسرات. المرفق، الشعار في هذه الحالة، يتحقق بشكل صحيح على إنشاء ولكن لا يفشل التحقق من الصحة عند التحديث. لقد قمت بتصحيحه ويقوم بفشل التحقق من الصحة التالفة ولكن لا يبدو أن رمي استثناء أو على الأقل لا يتم اكتشافه بإنقاذي في وحدة التحكم. يبدو أنني جربت كل شيء ولكن لا أستطيع معرفة هذا واحد.

مراقب:

  # POST /tournaments
  # POST /tournaments.xml
  def create
    # Build tournament
    @tournament = Tournament.new(params[:tournament].merge(:user_id => current_user.id) )

    # Save the uploaded attachments
    params[:uploads].each do |upload|
      @tournament.documents << Document.new({:uploaded_data => upload[:document]}.merge(:description => upload[:description]))
    end unless params[:uploads].nil?

    # if supplied save an event logo
    @logo = Logo.new({:uploaded_data => params[:logo][:upload_data]}) unless params[:logo].nil? or params[:logo][:upload_data].blank?  
    @tournament.logo = @logo unless @logo.nil?     

    respond_to do |format|
      begin
        Tournament.transaction do    
          @tournament.logo.save! unless @tournament.logo.nil?
          @tournament.save!  
        end
        flash[:notice] = 'Tournament was successfully created.'
        format.html { redirect_to tournament_url(@tournament) }
        format.xml  { head :created, :location => tournament_url(@tournament) }        
      rescue 
          flash[:notice] = 'Errors prevented your Tournament from being saved'
        format.html { render :action => "new" }
        format.xml  { render :xml => @tournament.errors, :status => :unprocessable_entity }
      end
    end
  end

  # PUT /tournaments/1
  # PUT /tournaments/1.xml
  def update
    @tournament = Tournament.find(params[:id])
    @tournament.user_id = session[:orig_user_id]

    respond_to do |format|
      begin
        Tournament.transaction do   
          # Update Logo if necessary
          unless params[:logo][:upload_data].blank?
            @tournament.logo.destroy unless @tournament.logo.nil?
            @tournament.logo = Logo.new({:uploaded_data => params[:logo][:upload_data]}.merge(:user_id => current_user.id)) 
          end   
          # Save any uploaded documents
          params[:uploads].each do |upload|
            @tournament.documents << Document.new({:uploaded_data => upload[:document]}.merge(:description => upload[:description]))
          end unless params[:uploads].nil?   
          # Update Tournamnet Attributes
          @tournament.attributes = params[:tournament]  
          # Save the Tournament
          @tournament.save!         
        end
        flash[:notice] = 'Tournament was successfully updated.' 
        format.html { redirect_to tournament_url(@tournament) }
        format.xml  { head :ok, :location => tournament_url(@tournament) }        
      rescue 
          flash[:notice] = 'Errors prevented your Tournament from being updated' 
        format.html { render :action => "edit" }
        format.xml  { render :xml => @tournament.errors, :status => :unprocessable_entity }
      end
    end
  end  

نموذج الشعار:

    class Logo < Asset    

  validate_on_create :attachment_valid? 

  has_attachment :content_type => :image, 
    :storage => :file_system, 
    :max_size => 4.megabytes,
    :resize_to => '810x150>',  
    :processor  => :ImageScience,
    :thumbnails => { :thumb => '270x50>'  }  


  def attachment_valid? 
    content_type = attachment_options[:content_type] 
    unless content_type.nil? || content_type.include?(self.content_type) 
      errors.add(:upload_data, " * must be an image file (jpg, gif, or png)")  
    end 
    size = attachment_options[:size] 
    unless size.nil? || size.include?(self.size)               
      errors.add(:upload_data, "* image must be 4MB or less")  
    end   
  end 


  before_thumbnail_saved do |thumbnail|
    record = thumbnail.parent
    thumbnail.user_id = record.user_id 
    thumbnail.listing_id = record.listing_id
  end

end     

أنا أقوم بتشغيل ما يلي

القضبان 2.3.3.

Image_science 1.2.0.

شكرا - طيط

هل كانت مفيدة؟

المحلول

يمكنك أيضا استخدام رد رد اتصال A: Preforke لاختبار الكائن. إذا كان غير صالح، ارفع استثناء.

نصائح أخرى

حاول إضافة:

validate_on_update :attachment_valid?
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top