Pronto, encontrei o problema.
Em primeiro lugar, suponho que você esteja usando Rails 4. A razão pela qual você está recebendo este erro é que
attr_protected
e attr_accessible
foram removidos do Rails 4 e colocados em sua própria gem. Rails agora está incentivando um novo modelo de proteção. Você pode ler sobre isso no README
. Se quiser continuar usando o comportamento antigo, inclua a gem protected_attributes
. Espero que ajude. EDIT:Adicionei esclarecimentos abaixo, pois é provável que seja um problema comum com os usuários ao atualizar para o Rails 4.
Se você quiser continuar usando
attr_accessible
, ou seja, o Rails 3 way, basta adicionar gem protected_attributes
para o seu Gemfile. Se você gostaria de começar a fazer as coisas da maneira Rails 4, você não deve mais usar
attr_accessible
. Em vez disso, você deve mover a lógica de permissão de atributo para o controlador. Aqui está um exemplo: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