Oké, ik heb het probleem gevonden.
Allereerst neem ik aan dat je Rails 4 gebruikt. De reden dat je deze foutmelding krijgt is dat attr_protected
en attr_accessible
zijn van Rails 4 verwijderd en in hun eigen edelsteen geplaatst. Rails moedigt nu een nieuw beschermingsmodel aan. U kunt hierover lezen in de README
. Als u het oude gedrag wilt blijven gebruiken, moet u de protected_attributes gem
opnemen . Ik hoop dat dat helpt.
EDIT:Ik heb hieronder verduidelijking toegevoegd, omdat dit waarschijnlijk een veelvoorkomend probleem is bij gebruikers die upgraden naar rails 4.
Als je attr_accessible
wilt blijven gebruiken , d.w.z. de Rails 3-manier, voeg eenvoudig gem protected_attributes
toe naar uw Gemfile.
Als je dingen op de Rails 4-manier wilt gaan doen, moet je attr_accessible
niet langer gebruiken . In plaats daarvan moet u de logica van de attribuutmachtiging naar de controller verplaatsen. Hier is een voorbeeld:
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