In_place_select_editor e Array
Già più volte vi ho parlato degli in_place_editing fornendo alcune soluzioni per espanderne le funzionalità; ultimamente ho avuto un altro piccolo problema. In un piccolo progetto che stiamo curando dovevo riempire la select con dei valori recuperati da un Array, non avendo modelli dove definire le relazioni e quindi facilitare l’accesso ai valori interessati, ho pensato a questa piccola soluzione. Cerco di chiarire (almeno ci provo): chiamo una tabella col nome Events e definisco alcuni campi:
1 2 3 create_table :events do |t| 4 t.column "title", :string 5 t.column "object", :string 6 t.column "body", :text 7 t.column "category_id", :integer, :limit => 2 8 t.column "extended_body", :text 9 t.column "created_at", :datetime 10 end 11 end 12 13 14 drop_table :events 15 end 16 end
Il campo category_id conterrà l’id della categoria a cui associare l’ evento, a differenza del solito, invece di avere una tabella contenente tutte le categorie per poi definire una relazione has_many nei modelli decido di non appoggiarmi al Db e neanche di realizzare un modello di appoggio, ma semplicemente di definire un Array contenente le categorie.
Nel modello Event ho definito un Array CATEGORY_EVENT contente la categoria e il suo id.
1
Nelle vostre viste potete usare l’implace editing in questo modo:
1 in_place_select_editor_field(:event, :category_id, {}, {:select_options => Event::CATEGORY_EVENT})
Adesso si definisce la funzione che consente di modificare il record e che rirenderizza il nuovo valore, una funzione del tipo: set_event_category_id.
Beh per farlo ho realizzato un modulo, che potete includere nel vostro application.rb:
1 2 3 4 base.extend(ClassMethods) 5 end 6 7 8 9 class_eval %{ 10 def set__ 11 @item = .find(params[:id]) 12 @item. = params[:value] 13 @item.save 14 render :text => .rassoc(params[:value].to_i)[0] 15 end 16 } 17 end 18 end 19 20 end
Chiaramente adesso dovete richiamarla nel controllore degli eventi:
1 in_place_select_for :event, :category, :select_options => Event::CATEGORY_EVENT.to_json
la funzione in_place_select_for vuole, come quella standard, il modello su cui lavorare e il campo, in questo caso anche l’Array dei valori che riempono la select.
Così viene visualizzato il valore della categoria e salvato l’id. Se un giorno decidete di modificare il nome di una categoira tutti gli eventi ad essa associati non dovranno essere modificati poichè il category_id non è stato variato.


Please can you upload or sent to me a ZIP file with a full example? This feature is great.
Many thanks.
Ok Vigosan, i’ll create a rails project with a full example!! let me to prepeare it!
Thank you, i’m pleasured to help you.
Duccio
Hi vigosan see this post
Hi duccio, many thanks !!!
Duccio,
I’m download it and test, it works very well.
Thanks again for your help.
It’s a pleasure!
Duccio