¿Cómo se utiliza attr accessible en Rails 4?
attr_accessible
parece que ya no funciona dentro de mi modelo.
¿Cuál es la forma de permitir la asignación de masa en Rails 4?
5 answers
Rails 4 ahora usa parámetros fuertes.
La protección de atributos se realiza ahora en el controlador. Este es un ejemplo:
class PeopleController < ApplicationController
def create
Person.create(person_params)
end
private
def person_params
params.require(:person).permit(:name, :age)
end
end
Ya no es necesario establecer attr_accessible
en el modelo.
Tratar con accepts_nested_attributes_for
Para usar accepts_nested_attribute_for
con parámetros fuertes, deberá especificar qué atributos anidados deben incluirse en la lista blanca.
class Person
has_many :pets
accepts_nested_attributes_for :pets
end
class PeopleController < ApplicationController
def create
Person.create(person_params)
end
# ...
private
def person_params
params.require(:person).permit(:name, :age, pets_attributes: [:name, :category])
end
end
Las palabras clave se explican por sí mismas, pero por si acaso, puede encontrar más información sobre los parámetros fuertes en la guía del Controlador de Acción Rails .
Nota: Si usted todavía desea utilizar attr_accessible
, necesita agregar protected_attributes
a su Gemfile
. De lo contrario, se enfrentará a un RuntimeError
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-01 14:29:42
Si prefiere attr_accessible, también podría usarlo en Rails 4. Usted debe instalarlo como gem:
gem 'protected_attributes'
Después de eso puedes usar attr_accessible en tus modelos como en Rails 3
También, y creo que es la mejor manera-el uso de objetos de formulario para hacer frente a la asignación masiva, y guardar objetos anidados, y también se puede utilizar protected_attributes gema de esa manera
class NestedForm
include ActiveModel::MassAssignmentSecurity
attr_accessible :name,
:telephone, as: :create_params
def create_objects(params)
SomeModel.new(sanitized_params(params, :create_params))
end
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-03 18:16:40
Podemos usar
params.require(:person).permit(:name, :age)
Donde person es Model, puede pasar este código en un método person_params & use en lugar de params [: person] en create method o bien method
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-05 10:56:17
1) Actualiza Devise para que pueda manejar Rails 4.0 añadiendo esta línea al Gemfile de tu aplicación:
gem 'devise', '3.0.0.rc'
Luego ejecutar:
$ bundle
2) Añadir de nuevo la antigua funcionalidad de attr_accessible
a rails 4.0
Intenta usar attr_accessible
y no comentes esto.
Agregue esta línea al Gemfile de su aplicación:
gem 'protected_attributes'
Luego ejecutar:
$ bundle
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-02 04:31:55
Una actualización para Rails 5:
gem 'protected_attributes'
Ya no parece funcionar. Pero dar:
Gema 'protected_attributes_continued'
Un intento.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-18 00:16:23