2012-08-07 14 views
5

Digamos que está en su controlador de usuario y desea cambiar el nombre a @user en función de algunos parámetros que tenga disponibles.En Rails 3, ¿hay alguna diferencia entre = y assign_attributes?

Quiero saber si hay alguna diferencia entre lo siguiente:

@user.name = params[:user][:name] 

o

@user.assign_attributes({:name=> params[:user][:name]}) 

Gracias de antemano!

Respuesta

7

Una excelente forma de resolver preguntas como esta es sumergirse en el source. He encontrado el método en el activerecord/lib/active_record/attribute_assignment.rbCheck it out here.

en realidad solo bucle a través de los parámetros dado el método assign_attributes y envía el mensaje :name= a su modelo. Sin embargo, debido a que posiblemente asigne muchos atributos, toma en cuenta las precauciones de asignación masiva. (es decir, asegúrese de que el atributo aparezca como attr_accessible).

3

El = (por ejemplo, @user.name = params[:user][:name]) llama directamente al ajustador de atributos sin comprobación de seguridad. La seguridad assign_attributes cheques por los valores pasados ​​en

De la API de rieles para assign_attributes:.

Permite configurar todos los atributos para un rol de seguridad especial en masa asignación mediante introducción de un hash de atributos con claves que coincidan con los nombres de los atributos (que nuevamente coinciden con los nombres de las columnas) y el nombre del rol con la opción: as.

Source for assign_attributes

Cuestiones relacionadas