Ok, jag har hittat problemet.
Först och främst antar jag att du använder Rails 4. Anledningen till att du får det här felet är att attr_protected
och attr_accessible
har tagits bort från Rails 4 och placerats i sin egen pärla. Rails uppmuntrar nu en ny skyddsmodell. Du kan läsa om detta i README
. Om du vill fortsätta använda det gamla beteendet måste du inkludera protected_attributes gem
. Hoppas det hjälper.
EDIT:Jag har lagt till ett förtydligande nedan eftersom detta sannolikt är ett vanligt problem för användare att uppgradera till rails 4.
Om du vill fortsätta använda attr_accessible
, det vill säga Rails 3-vägs, lägg helt enkelt till gem protected_attributes
till din Gemfile.
Om du vill börja göra saker på Rails 4-sättet får du inte längre använda attr_accessible
. Istället måste du flytta attributbehörighetslogiken till styrenheten. Här är ett exempel:
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