Ok, ich habe das Problem gefunden.
Zunächst einmal nehme ich an, dass Sie Rails 4 verwenden. Der Grund, warum Sie diesen Fehler erhalten, ist, dass attr_protected
und attr_accessible
wurden aus Rails 4 entfernt und in einem eigenen Juwel platziert. Rails fördert nun ein neues Schutzmodell. Sie können darüber in der README
nachlesen . Wenn Sie das alte Verhalten weiterhin verwenden möchten, müssen Sie das protected_attributes gem
einbinden . Hoffe das hilft.
BEARBEITEN:Ich habe unten eine Klarstellung hinzugefügt, da dies wahrscheinlich ein häufiges Problem bei Benutzern ist, die auf Rails 4 aktualisieren.
Wenn Sie attr_accessible
weiterhin verwenden möchten , d. h. auf Rails 3, fügen Sie einfach gem protected_attributes
hinzu zu Ihrem Gemfile.
Wenn Sie anfangen möchten, die Dinge auf Rails 4-Art zu erledigen, müssen Sie attr_accessible
nicht mehr verwenden . Stattdessen müssen Sie die Attributberechtigungslogik in den Controller verschieben. Hier ist ein Beispiel:
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