attr_accessible
semble ne plus fonctionner dans mon modèle.
Quel est le moyen d'autoriser l'assignation en masse dans Rails 4?
Rails 4 utilise maintenant paramètres forts .
La protection des attributs est maintenant effectuée dans le contrôleur. Ceci est un exemple:
class PeopleController < ApplicationController
def create
Person.create(person_params)
end
private
def person_params
params.require(:person).permit(:name, :age)
end
end
Plus besoin de définir attr_accessible
dans le modèle.
accepts_nested_attributes_for
Pour pouvoir utiliser accepts_nested_attribute_for
avec des paramètres forts, vous devez spécifier les attributs imbriqués devant figurer sur la liste blanche.
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
Les mots clés sont explicites, mais au cas où, vous trouverez plus d'informations sur les paramètres forts dans le guide Rails Action Controller .
Note: Si vous souhaitez toujours utiliser attr_accessible
, vous devez ajouter protected_attributes
à votre Gemfile
. Sinon, vous serez confronté à une RuntimeError
.
Si vous préférez attr_accessible, vous pouvez également l’utiliser dans Rails 4. .. Vous devez l’installer comme gem:
gem 'protected_attributes'
après cela, vous pourriez utiliser attr_accessible dans vos modèles, comme dans Rails 3
En outre, et je pense que c'est la meilleure façon d'utiliser des objets de formulaire pour gérer l'affectation en masse et enregistrer des objets imbriqués, vous pouvez également utiliser protected_attributes gem de cette façon
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
On peut utiliser
params.require(:person).permit(:name, :age)
où person est Model, vous pouvez transmettre ce code à une méthode person_params & use à la place de params [: person] dans la méthode create ou bien la méthode
1) Mettez à jour Devise pour qu’il puisse gérer Rails 4.0 en ajoutant cette ligne au fichier Gemfile de votre application:
gem 'devise', '3.0.0.rc'
Puis exécutez:
$ bundle
2) Ajoutez à nouveau l'ancienne fonctionnalité de attr_accessible
à Rails 4.0.
Essayez d'utiliser attr_accessible
et ne commentez pas ceci.
Ajoutez cette ligne au fichier Gemfile de votre application:
gem 'protected_attributes'
Puis exécutez:
$ bundle
Une mise à jour pour Rails 5:
gem 'protected_attributes'
ne semble plus fonctionner. Mais donnez:
gem 'protected_attributes_continued'
un essai.