Filtrare i risultati in modo Agile con Ruby on Rails

Logo Rails Spesso ho avuto la necessità di dover inserire nei miei progetti delle condizioni multiple alle mie select, il problema era che queste condizioni a loro volta dipendevano da altre.

Vi faccio subito un esempio per farvi capire cosa intendo:
Blog.find(:all, 
            :conditions => ["new=? and type=?",true, params[:type_id]])

Il problema è che se non passo il parametro params[:type_id] ottengo un errore, in questo caso facilmente gestibile, ma se avessi 4 o 5 clausole, il tutto sarebbe più macchinoso.

Quindi ho optato per un approccio diverso.

Ho preso parte del codice fornitomi da un amico Divoxx e l'ho modificato in modo molto duttile.

Per prima cosa scaricate il mio plugin ed installatelo nel vostro progetto:

script/plugin install http://lipsiasoft.googlecode.com/svn/trunk/filter

Ora per fare quello che abbiamo accennato all'inizio possiamo semplicemente fare cosi:

filters = Filter.new

filters.equal params[:type_id], :type_id     if params[:type_id]
filters.great params[:date_start], :created_at if params[:date_start]
filters.less params[:date_end], :created_at if params[:date_end]
filters.equal params[:cat_id], :cat_id if params[:cat_id]

blogs = Blog.find(:all,
                :conditions => filters.conditions)

Agile no?

Attendo un bel voto su AgileWebDevelopment

Technorati Tags: , ,

Inviato da Davide D'Agostino il June 05, 2007 12:53