Domanda

Sono stato con attachment_fu su un progetto per un lungo tempo e tutto andava bene, ma ora come sto cercando di portare il progetto fino alle rotaie 2.3.3 Sono in esecuzione in uno strano bug che mi sta facendo impazzire. L'allegato, un logo in questo caso, convalida correttamente creare, ma non manca la convalida aggiornata. Ho il debug e viene a mancare la convalida intial, ma non sembra un'eccezione o almeno non uno che è catturato da mio soccorso nel controller. Sembra che io ho provato di tutto, ma non riesco a capire questo fuori.

Controller:

  # 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  

Logo Modello:

    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     

Sono in esecuzione il seguente

Rails 2.3.3

image_science 1.2.0

Grazie --Tim

È stato utile?

Soluzione

Si potrebbe anche usare un: before_save callback per testare l'oggetto. Se non è valido, sollevare un'eccezione.

Altri suggerimenti

prova ad aggiungere:

validate_on_update :attachment_valid?
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top