Vorrei sapere quali campi sono stati aggiornati dopo un'istruzione update_attributes. Sto filtrando i parametri aggiornabili e cancellando quelli che non voglio aggiornati dal params[:model]
. Ora, alcuni dei nuovi parametri aggiornabili potrebbero avere lo stesso valore di quello vecchio e mi piacerebbe sapere quale parametro è stato aggiornato e quale è stato saltato per lo stesso valore. Ecco parte del codice:Trovare quali campi sono stati aggiornati dopo aver chiamato update_attributes?
UPDATABLE_PARAMS = ["param1", "param2", "param3", "param4"]
def update
@dr = DR.find(params[:id])
authorize! :update, @dr #devise stuff
hnew = params[:dr]
hnew.delete_if {|k, v| !UPDATABLE_PARAMS.include?(k.to_s) }
if @dr.update_attributes(hnew)
@dr.update_attribute(:last_updated_by, current_user.email)
@dr.touch
end
render :update_result
end
Ecco la parte difficile:
mi piacerebbe rendere l'oggetto @dr
in JSON (ma che già selezionati) e in aggiunta ai suoi campi standard, I' Mi piacerebbe aggiungere un oggetto nidificato che contenga lo updated_params
. Potrei semplicemente inviare hnew
come @hnew
alla mia vista, ma se lo faccio otterrò tutti i parametri processati, non solo quelli che erano diversi.
Come posso ottenere i parametri modificati?
La migliore pratica consiste nel gestire i parametri consentiti di massa consentiti tramite attr_accessible e utilizzando: come opzione per assegnare_attributi/update_attributes/new. –
grazie viktor. Sto usando attr_accessible ma solo per nuovi record. L'aggiornamento ha diversi access accessibili che dipendono da altri fattori (come un paio di valori dei campi dei record) – Oktav