Devise :: InvitationsController#create中的RuntimeError,找不到nil的有效映射

问题描述 投票:0回答:1

我在Rails 5应用程序中使用devise_invitable gem。每次提交“发送邀请”按钮后,我都会收到错误Devise :: InvitationsController#create中的RuntimeError,找不到nil的有效映射

这是application_controller.rb文件的代码:

class ApplicationController < ActionController::Base
    protect_from_forgery with: :exception
    before_action :configure_permitted_parameters, if: :devise_controller?

    def authenticate_inviter!
        unless current_user.role=='Manager'
            if current_user.role == "Developer"
                redirect_to root_path, :alert => "Access Denied! Only Manager Can Add New Developer"
            end
            super
        end
    end
    protected
    def configure_permitted_parameters
        added_attrs = [ :email, :password, :password_confirmation ]
        devise_parameter_sanitizer.permit :sign_up, keys: added_attrs
        devise_parameter_sanitizer.permit :account_update, keys: added_attrs
        devise_parameter_sanitizer.permit :accept_invitation, keys: [:email]
    end
end

这里是User.rb的代码:

class User < ApplicationRecord
    include DeviseInvitable::Inviter
    devise :invitable, :database_authenticatable, :registerable,
     :recoverable, :rememberable, :validatable
end

这里是Route.rb

Rails.application.routes.draw do
    devise_for :users
    root 'dashboard#index'
end

这里是所有路线:

前缀动词URI模式控制器#Actionnew_user_session GET /users/sign_in(.:format)devise / sessions#newuser_session POST /users/sign_in(.:format)devise / sessions#createdestroy_user_session DELETE /users/sign_out(.:format)devise / sessions#destroynew_user_password GET /users/password/new(.:format)devise / passwords#newedit_user_password GET /users/password/edit(.:format)devise / passwords#edituser_password修补程序/users/password(.:format)devise / passwords#updatePUT /users/password(.:format)devise / passwords#updatePOST /users/password(.:format)devise / passwords#createcancel_user_registration GET /users/cancel(.:format)devise_invitable / registrations#cancelnew_user_registration GET /users/sign_up(.:format)devise_invitable / registrations#newedit_user_registration GET /users/edit(.:format)devise_invitable / registrations#edituser_registration修补程序/users(.:format)devise_invitable / registrations#updatePUT /用户(。:format)devise_invitable / registrations#update删除/users(.:format)devise_invitable / registrations#destroyPOST /users(.:format)devise_invitable / registrations#createaccept_user_invitation GET /users/invitation/accept(.:format)devise / invitations#editremove_user_invitation GET /users/invitation/remove(.:format)设计/邀请#destroynew_user_invitation GET /users/invitation/new(.:format)devise / invitations#newuser_invitation PATCH /users/invitation(.:format)devise / invitations#updatePUT /用户/邀请(。:格式)设计/邀请#更新POST /用户/邀请(。:format)设计/邀请#创建根GET /仪表板#indexrails_service_blob GET / rails / active_storage / blobs :: signed_id / *文件名(。:format)active_storage / blobs#showrails_blob_representation GET /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format)active_storage / representations#showrails_disk_service GET / rails / active_storage / disk /:encoded_key / *文件名(。:format)active_storage / disk#showupdate_rails_disk_service PUT /rails/active_storage/disk/:encoded_token(.:format)active_storage / disk#updaterails_direct_uploads POST /rails/active_storage/direct_uploads(.:format)active_storage / direct_uploads#create
  • 我还没有创建任何自定义邀请控制器。
  • 我只是运行以下命令来设置和配置devise_invitable

    gem'devise_invitable'

    捆绑安装

    rails生成devise_invitable:install

    rails产生devise_invitable用户

    rails db:migrate

    rails产生devise_invitable:views

    重新启动Rails服务器

以下是完整错误的图片:see the picture of the complete error

我如何摆脱这个问题。请帮助我

ruby-on-rails ruby devise devise-invitable
1个回答
0
投票

最后,我在Scambra的帮助下解决了这个问题>

我刚刚更改了Application Controller

的逻辑

发件人:

def authenticate_inviter!
    unless current_user.role=='Manager'
        if current_user.role == "Developer"
            redirect_to root_path, :alert => "Access Denied! Only Manager Can Add New Developer"
        end
        super
    end
end

收件人:

def authenticate_inviter!
      if current_user.role == "Developer"
          redirect_to root_path, :alert => "Access Denied! Only Manager Can Add New Developer"
      end
      super
end
© www.soinside.com 2019 - 2024. All rights reserved.