Ok, znalazłem problem.
Przede wszystkim zakładam, że używasz Rails 4. Powodem, dla którego otrzymujesz ten błąd, jest to, że attr_protected
i attr_accessible
zostały usunięte z Rails 4 i umieszczone we własnym klejnocie. Rails zachęca teraz do nowego modelu ochrony. Możesz o tym przeczytać w README
. Jeśli chcesz nadal korzystać ze starego zachowania, musisz dołączyć klejnot protected_attributes
. Mam nadzieję, że to pomoże.
EDYCJA:dodałem wyjaśnienie poniżej, ponieważ prawdopodobnie będzie to częsty problem z uaktualnieniem do szyn 4.
Jeśli chcesz kontynuować korzystanie z attr_accessible
, tj. Rails 3 way, po prostu dodaj gem protected_attributes
do pliku Gemfile.
Jeśli chcesz zacząć robić rzeczy w sposób Rails 4, nie musisz już używać attr_accessible
. Zamiast tego należy przenieść logikę uprawnień atrybutów do kontrolera. Oto przykład:
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