in_place_editor con la validazione
Mi si è presentato il problema di dover validare la modifica dei dati tramite l’in_place_editor, io ho trovato una soluzione che può essere riutilizzata, leggermente migliorabile, ma comunque utile.
Per utilizzare l’in_place_editor con la validazione ho creato un file user_defined_function.rb da mettere nella cartella lib dell’applicazione:
1 2 3 4 base.extend(ClassMethods) 5 end 6 7 8 #The default Rails helpers do not check for validation 9 #before saving the attributes 10 #this function provides a way of safely editing 11 #a models attribute without destroying data integrity 12 13 class_eval %{ 14 def set__ 15 model_instance = .find(params[:id]) 16 model_instance. = params[:value] 17 model_instance.save 18 @ = model_instance 19 render :update do |page| 20 page.call "form_remove", "__"+params[:id] 21 page.replace('__'+params[:id]+'_in_place_editor', in_place_editor_field(:,:)) 22 if !model_instance.errors.on("").nil? 23 page.replace('__'+params[:id]+'_in_place_editor', render(:partial => "shared/in_place_form", :locals => {:model_name => "", :model_attribute => "", :id => params[:id].to_s, :er => model_instance.errors.on("")})) 24 end 25 end 26 end 27 } 28 end 29 end 30 end
Per funzionare serve includere in un file .js dove ci sono le vostre funzioni private, nel quale definire una funzione che io ho chiamato form_remove con la quale elimino dal dom il form dell’in_place_editor generato dopo l’errore del salvataggio.
Ecco la funzione form_remove:
1 2 if$id+"_form" 3 var d = documentgetElementById'content-div' 4 var r = documentgetElementByIdid+"_form" 5 var e = documentgetElementByIdid+"_error" 6 dremoveChildr 7 dremoveChilde 8
Prima di utilizzare l’in_place_editor con la vlidazione dovrete creare un parziale chimato _in_place_form:
1 2 3 4 5 6 cancel 7 8 9
Adesso includete il file nel vostro application_controller:
1 include UserDefinedFunction
A questo punto per utilizzare l’in_place_editor con la validazione mettete nel vostro controllore (vediamone uno di esempio)
1 6 end
e nelle vostre viste:
1
Come si potrebbe migliorare secondo me?
cercando di includere la funzione js all’interno del render partial in user_defined_function.rb. Io ci ho provato con page << ma mi ha dato errori e non ho avuto tempo di capire come mai!!!

