2014-03-29 59 views
0

我是Ruby on Rails的新手,我試圖爲此找到一個解決方案。 我有開始這樣的控制器:ActionController :: RoutingError(未定義的方法`load_and_authorize_resource'UserAccountsController:Class):

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

'load_and_authorize_resource'來自CanCan gem。你是否正確設置了它? –

回答

0

你應該學會閱讀錯誤信息。

從錯誤消息中提供您的程序嘗試調用尚未定義的方法。 Ruby是一種解釋型語言,你應該先調用每一種方法。

當你調用一個沒有明確接收者的mehtod時,ruby會將它發送到self對象。在類定義的內部self是類本身。在這種情況下,它是UserAccountsController

從方法的名稱我假設它實際上應該由cancancancancan寶石提供。如果你在這個源文件看(這是記錄良好):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 'cancancan' 
包括在您的項目的 Gemfile

一行。

相關問題