Ok, ho trovato il problema.
Prima di tutto, presumo che tu stia usando Rails 4. Il motivo per cui ricevi questo errore è che attr_protected
e attr_accessible
sono stati rimossi da Rails 4 e collocati nella loro gemma. Rails sta ora incoraggiando un nuovo modello di protezione. Puoi leggere questo in README
. Se desideri continuare a utilizzare il vecchio comportamento, devi includere la protected_attributes gem
. Spero di esserti stato d'aiuto.
EDIT:ho aggiunto un chiarimento di seguito poiché è probabile che questo sia un problema comune con gli utenti che eseguono l'aggiornamento a Rails 4.
Se desideri continuare a utilizzare attr_accessible
, ovvero il modo Rails 3, aggiungi semplicemente gem protected_attributes
al tuo Gemfile.
Se vuoi iniziare a fare le cose in modo Rails 4, non devi più usare attr_accessible
. È invece necessario spostare la logica di autorizzazione dell'attributo nel controller. Ecco un esempio:
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