我是Ruby on Rails的新手,我正试图找到解决方案。 我有一个像这样开始的控制器:
class UserAccountsController < ApplicationController
include Concerns::UserFinancialContext
load_and_authorize_resource :except => [: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 `<class:UserAccountsController>'
app/controllers/user_accounts_controller.rb:1:in `<top (required)>'
知道如何解决这个问题吗?
答案 0 :(得分:1)
您应该学会阅读错误消息。
从错误消息中,您提供的程序试图调用尚未定义的方法。 Ruby是一种解释型语言,您调用的每个方法都应该在headhead之前定义。
当您调用没有显式接收器的方法时,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
以后如何将ApplicationController
继承的UserAccountsController
提供给该方法:
if defined? ActionController::Base
ActionController::Base.class_eval do
include CanCan::ControllerAdditions
end
end
现在,您通常希望将该gem添加到您的项目中,并根据gem文档将其添加到您的项目Gemfile
中
gem 'cancancan'
线。
答案 1 :(得分:1)
我在API-only mode中使用Rails并需要修改我的ApplicationController以包含CanCan :: ControllerAdditions,因为它继承自ActionController :: API:
class ApplicationController < ActionController::API
include CanCan::ControllerAdditions
其他控制器继承自此控制器,例如:
class UsersController < ApplicationController
这是解决the 'elsif',它添加了ActionController :: Base而不是ActionController :: API,尽管两者都是在我的应用程序中定义的(通过gem actionpack)