Ok, j'ai trouvé le problème.
Tout d'abord, je suppose que vous utilisez Rails 4. La raison pour laquelle vous obtenez cette erreur est que attr_protected
et attr_accessible
ont été retirés de Rails 4 et placés dans leur propre gemme. Rails encourage désormais un nouveau modèle de protection. Vous pouvez lire à ce sujet dans le README
. Si vous souhaitez continuer à utiliser l'ancien comportement, vous devez inclure le protected_attributes gem
. J'espère que ça aide.
EDIT :J'ai ajouté des précisions ci-dessous, car il s'agit probablement d'un problème courant avec les utilisateurs lors de la mise à niveau vers Rails 4.
Si vous souhaitez continuer à utiliser attr_accessible
, c'est-à-dire la manière Rails 3, ajoutez simplement gem protected_attributes
à votre Gemfile.
Si vous souhaitez commencer à faire les choses à la manière Rails 4, vous ne devez plus utiliser attr_accessible
. Au lieu de cela, vous devez déplacer la logique d'autorisation d'attribut dans le contrôleur. Voici un exemple :
class UsersController < ApplicationController
def create
# Using params[:user] without calling user_params will throw an error because
# the parameters were not filtered. This is just some Rails magic.
@user = User.new user_params
if @user.save
# Do whatever
else
render action: :new
end
end
private
def user_params
# params.require(:user) throws an error if params[:user] is nil
if current_user.nil? # Guest
# Remove all keys from params[:user] except :name, :email, :password, and :password_confirmation
params.require(:user).permit :name, :email, :password, :password_confirmation
elsif current_user.has_role :admin
params.require(:user).permit! # Allow all user parameters
elsif current_user.has_role :user
params.require(:user).permit :name, :email, :password, :password_confirmation
end
end