Forum: Italian Ruby user group Rails: update "massivo"

Posted by Emanuele DelBono (Guest)
on 2012-05-27 08:19
(Received via mailing list)
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
Posted by Alessandro Mencarini (Guest)
on 2012-05-27 10:28
(Received via mailing list)
> 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/w...

Spero di avere interpretato bene la tua esigenza :)

--
Alessandro Mencarini
freegoweb.it
Posted by Emanuele DelBono (Guest)
on 2012-05-27 22:02
(Received via mailing list)
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 Mencarini <a.mencarini@freegoweb.it>:
Posted by Paolo Montrasio (pmontrasio)
on 2012-05-27 22:29
E a proposito di update massivo, i problemi di sicurezza che spiegano
qui http://guides.rubyonrails.org/security.html#mass-assignment 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
Posted by Emanuele DelBono (Guest)
on 2012-05-27 22:30
(Received via mailing list)
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 <emanuele.delbono@gmail.com>:
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.