Rails: update "massivo"

Domanda da niubbo.

Ho una pagina in cui l’utente pu modificare una specie di oggetto
ordine: testata + righe. Pu aggiungere, togliere, modificare righe.
Quando scatena l’update c’ un modo per persistere le modifiche senza
gestire a mano gli insert/update/delete?

Se mi limito ad un @order.update_attributes(params[:order]) non
cancella quelle rimosse dall’utente.

grazie

Ho una pagina in cui l’utente pu modificare una specie di oggetto
ordine: testata + righe. Pu aggiungere, togliere, modificare righe.
Quando scatena l’update c’ un modo per persistere le modifiche senza
gestire a mano gli insert/update/delete?

Se mi limito ad un @order.update_attributes(params[:order]) non
cancella quelle rimosse dall’utente.

Cos a naso direi che hai un modello Order con un’associazione tipo
has_many :rows, e in quel caso hai bisogno di una soluzione in
accepts_nested_attributes_for.

Qua una valida introduzione alla cosa:
http://archives.ryandaigle.com/articles/2009/2/1/what-s-new-in-edge-rails-nested-attributes

Spero di avere interpretato bene la tua esigenza :slight_smile:


Alessandro M.
freegoweb.it

Grazie, in effetti l’articolo spiega un po’ di cose e mi fa intuire
che questo codice dovrebbe funzionare:

orders_controller

def update
@order = Order.find(params[:id])
@order.update_attributes(params[:order])
redirect_to orders_path
end

Cio se da order tolgo un item l’update se ne accorge e lo rimuove.
Giusto?

A me non funziona, ma io sto usando MongoDb/MongoId…potrebbe essere
dovuto a quello?

grazi.e

2012/5/27 Alessandro M. [email protected]:

Risolto!
Con MongoId va specificato sul modello “Parent” (quello di Order)
l’allow_destroy per i nested_attributes:

accepts_nested_attributes_for :order_items, :allow_destroy => true

grazie comunque. Articolo molto interessante.

2012/5/27 Emanuele DelBono [email protected]:

E a proposito di update massivo, i problemi di sicurezza che spiegano
qui Securing Rails Applications — Ruby on Rails Guides riguardo
a casi come Order.new(params[:order]) valgono anche per l’update. Usa
attr_accessible a meno che tu non voglia esporre agli utenti tutti i
campi di Order e dei suoi nested attributes.

Paolo