CanCan load_and_authorize_resource löst verbotene Attribute aus

Ich habe einen Standard-RESTful-Controller, der starke Parameter verwendet.

class UsersController < ApplicationController
  respond_to :html, :js

  def index
    @users = User.all
  end

  def show
    @user = User.find(params[:id])
  end

  def new
    @user = User.new
  end

  def edit
    @user = User.find(params[:id])
  end

  def create
    @user = User.new(safe_params)

    if @user.save
      redirect_to @user, notice: t('users.controller.create.success')
    else
      render :new
    end
  end

  def update
    @user = User.find(params[:id])

    if @user.update_attributes(safe_params)
      redirect_to @user, notice: t('users.controller.update.success')
    else
      render :edit
    end
  end

  def destroy
    @user = User.find(params[:id])

    if current_user != @user
      @user.destroy
    else
      flash[:error] = t('users.controller.destroy.prevent_self_destroy')
    end
    redirect_to users_url
  end

  private

  def safe_params
    safe_attributes =
      [
        :first_name,
        :last_name,
        :email,
        :password,
        :password_confirmation,
      ]
    if current_user.is?(:admin)
      safe_attributes += [:role_ids]
    end
    params.require(:user).permit(*safe_attributes)
  end
end

In meinemconfig/initializers Ich habe die Aktestrong_parameters.rb

ActiveRecord::Base.send(:include,  ActiveModel::ForbiddenAttributesProtection)

Wenn ich CanCan's einen einfachen Anruf hinzufügeload_and_authorize_resource Ich bekomme

1) UsersController POST create with invalid params re-renders the 'new' template
 Failure/Error: post :create, user: @attr
 ActiveModel::ForbiddenAttributes:
   ActiveModel::ForbiddenAttributes
 # ./spec/controllers/users_controller_spec.rb:128:in `block (4 levels) in <top (required)>'

Woher@attr im Test ist definiert als

  before(:each) do
    @attr =
      {
        first_name: "John",
        last_name: "Doe",
        email: "[email protected]",
        password: "foobar",
        password_confirmation: "foobar"
      }
  end

In den Tests habe ich alles richtig eingerichtet, um den Benutzer anzumelden und ihm die erforderlichen Rollen als Administrator zuzuweisen, damit ich weiß, dass dies nicht der Fall ist. Ich weiß nicht, warum dies dazu führt, dass ForbiddenAttributes ausgelöst wird. Ich bin sicher, es ist etwas Einfaches, das ich übersehen habe. Hat jemand anderes auf dieses Problem gestoßen und eine Lösung dafür gefunden?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage