in_place_editor multiplo
Oggi, mentre cercavo di utilizzare in_place_editor mi sono confrontato con alcuni problemi:
- L’utilizzo di in_place_editor per la modifica di una collezione di record.
- La validazione del modello durante il salvataggio del record.
Vediamo come risolvere questi due punti, assumendo di voler utilizzare in_place_editor con una tabella di nome categories e voler cambiare il campo name.
Per quanto riguarda il primo punto dobbiamo creare un partial di nome _category.rhtml con il seguente codice:
1 2
dove category è la variabile passata al partial dalla vista da cui è richiamato. Il tip sta nel creare una nuova variabile @category che andrà ad utilizzare l’helper in_place_editor_field.
Il secondo punto si può risolvere facendo un override della funzione creata da in_place_editor_for all’interno del controllore. Questo perché in_place_editor salva le modifiche saltando la validazione dell’attributo. La nuova funzione sarà:
1 2 @cat = Category.find(params[:id]) 3 previous_name = @cat.name 4 @cat.name = params[:value] 5 @cat.name = previous_name unless @cat.save 6 render :text => @cat.name 7 end
In questo modo se il salvataggio non va a buon fine non sarà effettuata alcuna modifica sul database. Inoltre, creando manualmente la funzione setcategoryname è possibile togliere dal controllore la riga
1 in_place_editor_for :category, :name
Per risolvere il secondo punto è possibile anche creare un file (ajax_helper.rb) da inserire nella cartella lib in modo da effettuare l’override della funzione creata a runtime genericamente, in modo da non dover riscrivere il codice per ogni in_place_editor che si andrà a creare. Questo è stato proposto nel seguente post. Purtroppo nel codice è presente un bug, quindi ve lo scrivo corretto:
1
Dovrete a questo punto inserire nel controllore la seguente inclusione:
1 include AjaxHelper
e richiamare nel controllore
1 ajax_edit_field :category, :name
al posto di
1 in_place_editor_for :category, :name
Technorati Tags: ruby on rails, ajax


Ti ringrazio per questo post, sto proprio lavorando con in_place_editor ed avevo notato lo stesso problema…
Ci mancherebbe! è bello risolvere un problema e poter condividere la soluzione soprattutto con una comunità come quella intorno al Rails.