Ok, našel jsem problém.
Za prvé předpokládám, že používáte Rails 4. Důvodem, proč se vám zobrazuje tato chyba, je to, že attr_protected
a attr_accessible
byli odstraněni z Rails 4 a umístěni do svého vlastního drahokamu. Rails nyní podporuje nový model ochrany. O tom si můžete přečíst v README
. Pokud chcete nadále používat staré chování, musíte zahrnout drahokam Protected_attributes
. Doufám, že to pomůže.
EDIT:Níže jsem přidal vysvětlení, protože to bude pravděpodobně běžný problém uživatelů při upgradu na rails 4.
Pokud chcete nadále používat attr_accessible
, tj. způsobem Rails 3, jednoduše přidejte gem protected_attributes
do vašeho Gemfile.
Pokud byste chtěli začít dělat věci způsobem Rails 4, nesmíte již používat attr_accessible
. Místo toho musíte přesunout logiku oprávnění atributů do řadiče. Zde je příklad:
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