As we've now get a running web application to manage our library, I propose you to add an image field management to our Book model.
To manage this part, we are going to need 3 things:

  • an imaging tool like mini_magick or image_magick,
  • the paperclip plugin for rail
  • and the paper_clip_with_hobo to be used with Hobo framework.

1. The image tool
My choice go to imagemagick, but i know that this is working well with others tools like

2. Paperclip plugin
You will find very interesting infoirmation about this plugin usage at this page:
And you?? will be able to download it from

To install this small plugin, just go to your hobo application root path and run the following command:

script/plugin install git://

Now you have downloaded it, you are ready to use it.

3. Get the paperclip_with_hobo
Just fololowing the same process, you have to download/install this rails plugin from git:

script/plugin install git: ok. let's apply some model modification to our Book modelisation.Book.rbwe need to add some new field to our app/model/book.rb class Book < ActiveRecord::Base hobo_model # Don't put anything above this  fields do title :string  author :string year :integer  resume :text note :integer  timestamps end   has_attached_file :cover, :styles => {                   :full=>"600x600>",                  :medium => "300x300>",                   :thumb => "100x100>",                  :mini => "60x60>" },                  :path => " :rails_root/public/media/books/covers/:id/:style.:extension",                 :url => "media/books/covers/:id/;style.:extension"  ...end Adding such "has_attached_file" field to our Book model add in reality 4 fields to our database model after running the rake db:migrate standard rails operation : see db/migrate/20100221172242_add_attachements_cover_to_book.rb migration fileclass AddAttachmentsCoverToBook < ActiveRecord::Migration  def self.up add_column :books, :cover_file_name, :string  add_column :books, :cover_content_type, :string add_column :books, :cover_file_size, :integer  add_column :books, :cover_updated_at, :datetime end  def self.down remove_column :books, :cover_file_name  remove_column :books, :cover_content_type remove_column :books, :cover_file_size  remove_column :books, :cover_updated_at end endOk, now our model is updated, database too. we are ready to modify some dryml file to show this image. Go to app/views/taglibs/application.dryml and add the following declaration:At file beginning in existing "include" lines:<include src="paperclip" plugin="paperclip_with_hobo"/> And at end of file :<extend tag="form" for="Book">        <old-form merge multipart>                 <field-list fields="title, author, year, resume, note, cover, category" param/>         <div param="actions">  <submit label="#{ht '', :default=>['Save']}" param/><or-cancel param="cancel"/>  </div>        </old-form> </extend>This is a view modifier for a Book, adding the cover field and removing the 4 database fields. Then, modify the card dryml for Book model, in the same previous file (application.dryml) :<extend tag="card" for="Book"> ?? <card>?? ?? <h5> ?? ?? 

?? ??

?? ?? ?? ?? ?? ?? <view:resume /> ?? ?? </p>?? ?? <p> ?? ?? ?? <%= I18n.t :uploaded_label %><br />?? ?? ?? <view:created_at format="%B %d, %Y" /> by <you:user />. ?? ?? </p>?? ?? <delete-button class="actions" /> ?? ???? </card> </extend>Let's test our new cover field !