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)