¿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?

Author: Arslan Ali, 2013-06-28

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.

 440
Author: Pierre-Louis Gottfrois,
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
 22
Author: edikgat,
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

 4
Author: Hardik Hardiya,
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
 1
Author: Sid,
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.

 0
Author: miklki14567,
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