Tendrás que hacer algunos parches Rails para hacer esto. Asegúrese de usar solo este código en desarrollo y/o prueba, ya que no desea que su aplicación genere errores si un usuario intenta asignar en masa. Me gustaría añadir lo siguiente a config/initializers/error_mass_assign.rb
:
module ActiveModel
module MassAssignmentSecurity
module Sanitizer
protected
def warn!(attrs)
self.logger.debug "WARNING: Can't mass-assign protected attributes: #{attrs.join(', ')}" if self.logger
raise(RuntimeError, "Mass assignment error") if ['test', 'development'].include?(Rails.env)
end
end
end
end
Esto elevará el aviso regular, pero también a plantear un RuntimeError con el mensaje "error de asignación de masas", cuando en entornos de prueba y desarrollo atributos protegidos en cualquier momento están en serie asignado . También puede modificar el mensaje de error o error en el código anterior si prefiere otra excepción.
Asegúrese de reiniciar su consola o servidor para que esto surta efecto.
P.S: En los carriles 2 que querrá hacer lo siguiente:
module ActiveRecord
class Base
def log_protected_attribute_removal(*attributes)
logger.debug "WARNING: Can't mass-assign these protected attributes: #{attributes.join(', ')}"
raise(RuntimeError, "Mass assignment error")
end
end
end
¿Por qué no quiero hacer esto en la producción? Es decir, si un usuario intenta asignar en masa, está tratando de hacer algo que va en contra de las reglas (en cuyo caso está bien si su solicitud explota) o he olvidado hacer accesible un atributo (en cuyo caso quiero saber al respecto). –
Además, y lo siento por no mencionar en la pregunta, pero estoy usando Rails 2.3.4. ¿Qué cambios debo hacer en tu respuesta para que funcione en mi versión de Rails? –
Está bien si lo hace, solo querrá detectar el error y manejarlo adecuadamente, no desea dejar a su usuario con 500 páginas de error y sin explicación. Por ejemplo, si el usuario intenta piratear su sitio, probablemente se le notifique cuando esto ocurra, y si olvidó establecer un atributo como accesible, eso es algo que necesita corregir. –