AF83 sort une gem que nous utilisons dans nos projets de sites communautaires. Has_media est une bibliothèque pour ActiveRecord, pour gérer les médias dans les modèles avec une simple déclaration :
class User < ActiveRecord::Base
has_one_medium :avatar, :only => :image
end
On ajoute avec cette ligne un "champ" image pour un utilisateur. Il ne reste plus qu'à ajouter un file_field :avatar dans votre formulaire pour que l'image soit associée à l'utilisateur. L'upload est géré par carrierwave. Les méthodes de classe has_one_medium
ou has_many_media
ajoutent automatiquement les getter et setter pour l'avatar d'un utilisateur.
Les validations sont faites automatiquement selon le type de média défini par l'option :only => :image
.
Cas d'utilisation :
# Créer la migration
./script/generate has_media
Ajouter la gem dans config/environment.rb
config.gem 'has_media'
Changer les options de has_media dans config/initializers/has_media.rb
HasMedia.directory_path = "media" # Placer les médias dans Rails.root, 'public', 'media'
HasMedia.directory_uri = "/media"
HasMedia.errors_messages = {:type_error => I18n.t('has_media.errors.type_error')}
Pour le modèle voir plus haut et sur le formulaire
<p>
<%= f.label :avatar %>
<%= f.file_field :avatar %>
</p>
HasMedia ne gère pas les thumbnails (AF83 utilise une autre application pour cela), mais c'est facilement faisable avec carrierwave.
Plus d'informations : http://github.com/AF83/has_media Installation : gem install has_media