Ok, jeg har fundet problemet.
Først og fremmest går jeg ud fra, at du bruger Rails 4. Grunden til at du får denne fejl er, at attr_protected
og attr_accessible
er blevet fjernet fra skinner 4 og placeret i deres egen perle. Rails opfordrer nu til en ny beskyttelsesmodel. Du kan læse om dette i README
. Hvis du gerne vil fortsætte med at bruge den gamle adfærd, skal du inkludere protected_attributes perle
. Håber det hjælper.
EDIT:Jeg har tilføjet en afklaring nedenfor, da dette sandsynligvis vil være et almindeligt problem med brugere til at opgradere til skinner 4.
Hvis du gerne vil fortsætte med at bruge attr_accessible
, dvs. Rails 3-vejs, skal du blot tilføje gem protected_attributes
til din Gemfile.
Hvis du gerne vil begynde at gøre tingene på Rails 4-vejen, må du ikke længere bruge attr_accessible
. I stedet skal du flytte attributtilladelseslogikken ind i controlleren. Her er et eksempel:
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