J'ai été coincé sur une partie de mon site Web pendant quelques jours et j'ai été très frustré. J'ai un code pour télécharger un logo pour un utilisateur (code ci-dessous) à l'intérieur du logo = setter dans le modèle activerecord de l'utilisateur, mais cela m'empêche d'utiliser les validations du modèle. Existe-t-il un moyen pour moi de réorganiser le code suivant afin qu'il soit à la fois "joli" et me permet d'utiliser des validations de modèles?Validation du modèle Rails avec des fichiers
Merci
modèles/developer.rb
require 'fileutils'
class Developer < ActiveRecord::Base
has_many :games
has_many :user_associations
has_many :users, :through=>:user_associations
validates_uniqueness_of :name
validates_length_of :name, :in=>4...16
#validates_filesize_of :logo, :in=>1.kilobytes..100.kilobytes, :message=>'Logo must be between 1 and 100 kilobytes'
def logo
@logo
end
def logo=(file)
errors.add_to_base('Image should be a PNG, JPEG or GIF file') and return if !(['.gif', '.jpg', '.jpeg', '.png'].include? File.extname(file.original_filename).downcase)
logo_format=File.extname(file.original_filename).downcase
image_path=RAILS_ROOT+'/logos/'+to_param
@logo=file.path
FileUtils.mv(file.path, image_path)
end
def self.fetch(id)
Developer.find_by_name(id.gsub(/_/, ' '))
end
def to_param
return name.gsub(/[ ]/, '_').downcase;
end
end
contrôleurs/developer_controller.rb (les bits correspondants)
class DeveloperController < ApplicationController
before_filter :load_developer
def index
redirect_to :controller=>'developers', :action=>'list' if params[:id].nil?
end
def manage
end
def set_logo
if request.post? and !params[:logo].nil?
@active_developer.logo=params[:logo]
@[email protected]_developer.logo
@active_developer.save
end
end
private
def load_developer
if !params[:id].nil?
@active_developer=Developer.fetch params[:id]
else
@active_developer=nil
end
end
end
Merci, vous êtes génial, je vous aime: D after_validation est exactement ce que je cherchais! – alex