Object.update_attribute(:only_one_field, "Some Value")
Object.update_attributes(:field1 => "value", :field2 => "value2", :field3 => "value3")
Entrambi aggiorneranno un oggetto senza dover dire esplicitamente ad AR di aggiornarlo.
L'API di Rails dice:
per update_attribute
Aggiorna un singolo attributo e salva il record senza passare attraverso la normale procedura di convalida. Ciò è particolarmente utile per flag booleani su record esistenti. Il normale metodo update_attribute in Base viene sostituito con questo quando il modulo di convalida viene miscelato, che è per impostazione predefinita.
per update_attributes
Aggiorna tutti gli attributi dall'hash passato e salva il record. Se l'oggetto non è valido, il salvataggio fallirà e verrà restituito falso.
Quindi, se non voglio che l'oggetto sia validato, dovrei usare update_attribute. Cosa succede se ho questo aggiornamento su un before_save, impilerà overflow?
La mia domanda è che update_attribute ignora anche il salvataggio precedente o solo la convalida.
Inoltre, qual è la sintassi corretta per passare un hash a update_attributes ... dai un'occhiata al mio esempio in alto.
before_save
callback). Fe invece di update_attribute(:discount, 0.1) if amount > 100
te potrebbe fare discount = 0.1 if amount > 100
. update_attribute
chiama save
l'oggetto, che in questo caso non è necessario, poiché l'istruzione si trova all'interno di un before_save
callback e verrà comunque salvata. Spero che abbia un senso.
update_attribute
dichiarazione all'interno di unabefore_save
richiamata? Non riesco a pensare a una buona ragione per questo.