Es la protección contra la asignación de masa involuntaria.
El problema con el código que muestra es que los usuarios pueden modificar el formulario y cambiar los atributos que no desea que cambien, como las contraseñas hash en los usuarios o un estado publicado en las publicaciones.
Puede usar attr_protected
y attr_accessible
en los modelos para proteger los atributos en sus modelos que se anularán. Cuando se protege un atributo, se ignorará el valor de params
(aparecerá un aviso en su registro).
class Model < ActiveRecord::Base
attr_accessible :one, :two
end
Before Rails 3.1, eso era todo. No hubo forma de configurarlo después. Ahora, con Rails 3.1, puede asignar funciones:
class Model < ActiveRecord::Base
attr_accessible :one, :two, :as => :admin
attr_accessible :one, :as => :regular_user
end
y especificar que al hacer cambios masivos (new
o update_attributes
):
Model.new(params[:model], :as => :regular_user)
Uso :without_protection
, hará que todos los atributos libre para ser asignada de masas y debe usarse MUY con moderación. Nunca lo use cuando esté ingresando datos de usuario. Puede usarlo en db/seeds.rb
por ejemplo.
Lo sé, pero ¿de qué :)? ¿Cuál podría ser el problema, cuando puedo resolverlo al no usar protección? – Ynv
¿Cuál fue exactamente el problema que encontró que esto solucionó? Puede haber una solución mejor que usar ': without_protection' –
Tengo una vista que implica tres modelos, dos de los cuales se crean y uno que se carga desde db. Cuando trato de guardar esto, obtengo el problema mencionado. – Ynv