Las palabras clave se explican por sí mismas, pero por si acaso, puede encontrar más información sobre parámetros sólidos en la guía Controlador de acción Rails .
Nota : Si aún desea usar attr_accessible, debe agregar protected_attributesa su Gemfile. De lo contrario, te enfrentarás con a RuntimeError.
El documento no dice que sea attr_accessiblenecesario eliminarlo. ¿Qué pasará si lo guardamos?
lulalala
12
Obtendrá un error si no realiza algunos ajustes en su Gemfile. RuntimeError in MicropostsController#index 'attr_accessible' is extracted out of Rails into a gem. Please use new recommended protection model for params(strong_parameters) or add 'protected_attributes' to your Gemfile to use old one.
usuario
66
Gran explicación Sin embargo, parece que en la práctica, esto aleja a Rails del modelo gordo, el controlador delgado, etc., y lo acerca a modelos delgados y controladores realmente hinchados. Tienes que escribir todo esto para cada instancia, no se lee bien y anidar parece ser un dolor. El antiguo attr_accessible / attr_accessor en el sistema modelo no estaba roto y no necesitaba ser reparado. Una publicación de blog se hizo demasiado popular en este caso.
rcd
1
No tiene que manejar los parámetros permitidos en sus controladores. De hecho, es una violación del principio de responsabilidad única. Eche un vistazo a la siguiente publicación de blog edelpero.svbtle.com/strong-parameters-the-right-way
Pierre-Louis Gottfrois
3
Así que las apis truculentas y que cambian con frecuencia, junto con pedantes recién descubiertos desperdician muchas horas de desarrollador en otra actualización de Rails dolorosa :-(
Brian Takita
22
Si prefiere attr_accessible, también podría usarlo en Rails 4. Debes instalarlo como gema:
gem 'protected_attributes'
después de eso, podría usar attr_accessible en sus modelos como en Rails 3
Además, y creo que es la mejor manera: usar objetos de formulario para lidiar con la asignación masiva y guardar objetos anidados, y también puede usar la gema protected_attributes de esa manera
classNestedForm
include ActiveModel::MassAssignmentSecurity
attr_accessible :name,:telephone, as::create_params
def create_objects(params)SomeModel.new(sanitized_params(params,:create_params))endend
Cuando usa 'parámetros fuertes', filtra los parámetros en la capa del controlador, y no creo que esta sea la mejor idea para todas las aplicaciones. Para mí, la mejor manera de filtrar parámetros es usar una capa adicional. Y podemos usar la gema 'protected_attributes' para escribir esta capa
edikgat
4
Nosotros podemos usar
params.require(:person).permit(:name,:age)
donde person es Model, puede pasar este código en un método person_params y usarlo en lugar de params [: person] en el método create o en el método else
attr_accessible
necesario eliminarlo. ¿Qué pasará si lo guardamos?RuntimeError in MicropostsController#index 'attr_accessible' is extracted out of Rails into a gem. Please use new recommended protection model for params(strong_parameters) or add 'protected_attributes' to your Gemfile to use old one.
Si prefiere attr_accessible, también podría usarlo en Rails 4. Debes instalarlo como gema:
después de eso, podría usar attr_accessible en sus modelos como en Rails 3
Además, y creo que es la mejor manera: usar objetos de formulario para lidiar con la asignación masiva y guardar objetos anidados, y también puede usar la gema protected_attributes de esa manera
fuente
Nosotros podemos usar
donde person es Model, puede pasar este código en un método person_params y usarlo en lugar de params [: person] en el método create o en el método else
fuente
Una actualización para Rails 5:
Parece que ya no funciona. Pero dar:
gema 'protected_attributes_continued'
un intento.
fuente
1) Actualice el dispositivo para que pueda manejar Rails 4.0 agregando esta línea al Gemfile de su aplicación:
Luego ejecuta:
2) Agregue la funcionalidad anterior de
attr_accessible
nuevo a rails 4.0Intente usar
attr_accessible
y no comente esto.Agregue esta línea al Gemfile de su aplicación:
Luego ejecuta:
fuente