ActionController :: RoutingError(UserAccountsController的未定义方法`load_and_authorize_resource’:Class):

我是Ruby on Rails的新手,我正在努力寻找解决方案。 我有一个像这样开始的控制器:

class UserAccountsController  [:change_contract, :show_modal_simulator_invoice, :project_member_info, :new_account_in_modal, :user_view] 

我这里也有一个.rb文件:

 app/controllers/concerns/user_financial_context.rb 

最后

 app/doc/Concerns/UserFinancialContext.html 

但出现以下错误:

 ActionController::RoutingError (undefined method `load_and_authorize_resource' for UserAccountsController:Class): app/controllers/user_accounts_controller.rb:3:in `' app/controllers/user_accounts_controller.rb:1:in `' 

知道如何修复它吗?

您应该学会阅读错误消息。

从错误消息中,您提供的程序试图调用尚未定义的方法。 Ruby是一种解释型语言,您调用的每个方法都应该在headhead之前定义。

当你在没有显式接收器的情况下调用mehtod时,ruby将它发送给self对象。 在类定义的主体内部, self就是类本身。 在这种情况下,它是UserAccountsController

从方法的名称我假设它实际上应该由cancancan或cancan gem提供。 如果您查看此源文件(记录良好): controller_additions.rb您将看到方法定义:

 module ControllerAdditions module ClassMethods def load_and_authorize_resource(*args) cancan_resource_class.add_before_filter(self, :load_and_authorize_resource, *args) end end end 

稍后,如何将该方法提供给inheritanceUserAccountsController ApplicationController

 if defined? ActionController::Base ActionController::Base.class_eval do include CanCan::ControllerAdditions end end 

现在,您通常希望将该gem添加到您的项目中,并根据gem文档将其添加到项目的Gemfile

 gem 'cancancan' 

线。

我在仅使用API模式下使用Rails,并且需要修改我的ApplicationController以包含CanCan :: ControllerAdditions,因为它inheritance自ActionController :: API:

 class ApplicationController < ActionController::API include CanCan::ControllerAdditions 

其他控制器inheritance自此控制器,例如:

 class UsersController < ApplicationController 

这是为了解决'elsif'问题 ,它添加了ActionController :: Base而不是ActionController :: API,尽管两者都是在我的app中定义的(通过gem actionpack)