InPlaceEditor per l’updated_at
Nelle nostre applicazioni usiamo molto l’in_place_editor perchè spesso è utile per velocizzare la fase di modifica dei record. A me serviva fare un in_place per il campo updated_at, per fare in modo che cliccando sulla data apparissero le tre select con giorno, mese e anno.
Mentre facevo delle prove per vedere come risolvere il problema mi sono accorto che Internet Explorer da errore javascript quando in rjs si cerca di renderizzare un link_to_remote o un form_remote_tag. Per questo motivo per risolvere il problema ho associato dei comportamenti ad alcuni tag html per fare il submit del form e abilitare il cancel dopo aver cliccato per visualizzare l’in_place.
Di seguito il codice necessario per far funzionare l’in_place_editor per le date, sullo stesso principio ho fatto un plugin per abilitare l’in_place_editor con la validazione e con la gestione dei valori nulli nei record che pubblicherò in un articolo tra qualche giorno.
Ho creato un parziale chiamato _date.rhtml:
1 Data: 2 3 4 6 7 8 9 cancel 10 11 12 Saving... 13
Nelle vostre viste lo richiamate così:
1
Adesso vi serve definire i behavior io uso l’event selector, per ora, magari appena ho due minuti di tempo rendo un po’ meno “artigianale” questa soluzione!!
Comunque mettete l’event selector e fate un file myeffect.js:
1 /* Event:Selector */ 2 var Rules = 3 4 //lo metto per far funzionare il set-date 5 6 thisstopped = true; 7 elementstylebackgroundColor='rgb(255, 255, 153)'; 8 9 10 elementmorph'background-color: rgb(255, 255, 255); background-image: none;'; 11 12 13 14 Elementshow'date'; 15 Elementhideelementid; 16 return false; 17 18 19 20 formelement = $'set-date'; 21 formelementonSubmit = documentforms'set-date'actionasynchronous:trueevalScripts:trueElementhide'set-date';Elementshow'saving'parameters:Formserializeformelement; return false; 22 documentformssubmit; 23 24 25 26 Elementhide'date'; 27 Elementshowelementid+'_in_place_editor'; 28 return false; 29 30 31 32 33 Eventobservewindow'load'functionevent EventSelectorsstartRules; ;
Poi in una vostra libreria, io l’ho chiamata UserDefinedFunction da includere nel progetto:
1 2 3 4 class_eval %{ 5 def set_date 6 item = .find(params[:id]) 7 item.update_attributes(params[:]) 8 render :update do |page| 9 page.replace_html("show-date", :partial => "/shared/date", :object => item, :locals => {:obj => "", :attribute => "", :id => params[:id]} ) 10 end 11 end 12 } 13 end 14 end 15 16 end 17 end 18 ActionController::Base.send(:include, UserDefinedFunction) 19 ActionController::Base.send(:extend, UserDefinedFunction::ClassMethods)
Adesso se nel vostro controllore mettete set_date avete l’inplace editor per le select con l’hover colorato in giallo e il saving…
Adesso la funzione salva solo l’updated_at ma modificarla per far salvare qualunque campo di tipo date è un attimo.

