Attachment_fu avendo validare aggiornata
-
18-09-2019 - |
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
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?