Bien, he encontrado el problema.
En primer lugar, supongo que está utilizando Rails 4. La razón por la que recibe este error es que attr_protected
y attr_accessible
se han eliminado de Rails 4 y se han colocado en su propia gema. Rails ahora está fomentando un nuevo modelo de protección. Puede leer sobre esto en README
. Si desea continuar usando el comportamiento anterior, debe incluir la gema protected_attributes
. Espero que ayude.
EDITAR:Agregué una aclaración a continuación, ya que es probable que sea un problema común con los usuarios que se actualizan a Rails 4.
Si desea continuar usando attr_accessible
, es decir, la vía Rails 3, simplemente agregue gem protected_attributes
a su Gemfile.
Si desea comenzar a hacer las cosas a la manera de Rails 4, ya no debe usar attr_accessible
. En su lugar, debe mover la lógica de permisos de atributos al controlador. Aquí hay un ejemplo:
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