2011-05-27 11 views

Respuesta

15

update_attribute hace realmente una llamada física a la base de datos. Obtiene una ejecución completa de una declaración UPDATE. Es como update_attributes pero solo para una sola columna.

Mientras que write_attribute escribe el atributo para la asignación al modelo para columnas basadas en AR. Si fuera a sobrescribir un atributo basado en DB.

def first_name=(val) 
    write_attribute :first_name, val 
end 
# some_model.first_name => 'whatever val is' 

def first_name=(val) 
    @first_name = val 
end 
# some_model.first_name => nil 

no he mirado en write_attribute ampliamente, pero recopilar modelos basados ​​activerecord manejan las asignaciones a db columnas basadas ligeramente diferente a su funcionamiento de la fábrica de descriptor de acceso.

12

write_attribute se utiliza cuando desea sobrescribir los accesadores predeterminados para un método. Es esencialmente azúcar sintáctico para self[:attribute]=(value).

Eche un vistazo a ActiveRecord::Base documentation en el encabezado "Sobrescribir accesos predeterminados".

Si ha intentado volver a escribir el ejemplo en la documentación usando update_attribute, me imagino que terminaría en un bucle.