2012-03-22 5 views
0

私はdevisからcurrent_userを取得しようとするときに本当の問題を抱えています。ここからアカウントIDを決めてから、この宝石のset_current_tenant_toメソッドに変数として渡します:https://github.com/ErwinM/acts_as_tenant私は自分のアプリケーションのコントローラでapplication_controllerのクラスとメソッドの変数を設定する

class ApplicationController < ActionController::Base 

    protect_from_forgery # See ActionController::RequestForgeryProtection for details  
    helper :all # include all helpers, all the time 

    def get_current_account_id 
    current_account_user = current_user 
    current_account_id = current_account_user.account_id 
    current_account_id 
    end 

    current_account = Account.find(get_current_account_id) 
    set_current_tenant_to(current_account) 

私はbefore_filter呼び出しでそれを置くとき、私はそれが正しい数字を出力ログに見ることができるのでget_current_account_idが正しいACCOUNT_IDを推定することを知っています。しかし、私はこれを実行すると、私は次のエラーを取得:

Routing Error 

undefined local variable or method `get_current_account_id' for ApplicationController:Class 

を私はこの仕事を得ることができる方法上の任意のアドバイスやポインタをいただければ幸いです。

答えて

0

私はインスタンスメソッドではなく、クラスレベルのメソッドを呼び出すと推測しているので、自分で呼び出す必要があります。また、あなたは本当にすべてのそれらの余分の変数を必要としません:

class ApplicationController < ActionController::Base 
    def self.get_current_account_id 
    current_user.account_id 
    end 
end 
+0

.....それはとてもきれいで、細かい作業を願っていますが、それは動作しません。 'ルーティング: は' DEF をself.get_current_account_id私は今、次の応答を取得 エンド current_account = Account.find(get_current_account_id) set_current_tenant_to(current_account) ' をcurrent_user.account_id:私のコントローラでこれにより エラー 未定義のローカル変数またはメソッド 'current_user' for ApplicationController:Class' – Betjamin

+1

混乱はクラス対インスタンスメソッドの衝突です...一見すると、テナントは見た目が面白く見えます。しかし、それはtをロックするでしょう彼はすべての要求を実行するのではなく、最初の実行に説明します...私はその宝石の著者と明確にすることをお勧めします... – DGM

0

私はあなたが現在のテナントを設定するフィルタを作成してくださいしたいものを推測します。

class ApplicationController < ActionController::Base 
    before_filter :set_tenant_to_current_account 
    def set_tenant_to_current_account 
    current_account = Account.find(current_user.account_id) 
    set_current_tenant_to(current_account) 
    end 

    def set_current_tenant_to(account) 
    # Your business logic here. 
    @current_tenant = account 
    end 
end 

EDIT:あなたはアプリケーションのコントローラ内の任意のカスタムメソッドを定義するとset_tenant_to

+0

はい、それは私が思ったものですが、これを実行すると私は得る: 'NoMethodError in FooController#index '<:0x007f968e80e608 FooController> アプリ/コントローラ/ application_controller.rb:36:#のための' 未定義のメソッド 'set_current_tenant_to set_tenant_to_current_account'' – Betjamin

+0

あなたはどこでもあなたのコントローラでこのメソッドを定義していないので、[OK]を、これが起こります。あなたは "set_current_tenant_to"メソッドをどこで定義していますか? – rscarvalho

+0

は、それはここではこの宝石の一部として設定されている: https://github.com/ErwinM/acts_as_tenant/blob/master/lib/acts_as_tenant/controller_extensions.rb この上の任意の助けいただければ幸いです。 – Betjamin

0

を表現するために、いくつかのスタブメソッドのコードを入れて、あなたはこれを使用して、それを呼び出す必要がありますが、これを行う必要があります

呼び出し。

class ApplicationController < ActionController::Base 

    before_filter :get_current_account_id 


    protect_from_forgery # See ActionController::RequestForgeryProtection  
    helper :all # include all helpers, all the time 

    def get_current_account_id 
    current_account_user = current_user 
    current_account_id = current_account_user.account_id 
    set_tentant_id(current_account_id) 
    end 

    def set_tentant_id 
    #your logic 
    end 
end 

私はあなたの試みをありがとう

関連する問題