2016-04-13 8 views
1

私は、変数current_brands_membermembersのための認証のためのデバイスモデルであるブランドスコープについて次の基本コントローラ設定変数

class Brand::ApplicationController < ApplicationController 
    before_action :authenticate_brands_member! 
    before_action :current_company 
    helper_method :current_company 

    private 

    def current_company 
    current_brands_member? current_brands_member.company : nil 
    end 

end 

を持っています。私は、コントローラとビューで必要なときmember's companyのコンテンツを持つことになります一般的な変数current_companyを設定したいブランドに会社にメンバーを横断することになるので、各メンバーがCompany

members(id, name, company_id,...) 
companies(id, name, ....) 
brands(id, name, company_id,...) 

に属します。

私はこの

class Brands::MembersController < Brand::ApplicationController 
    def index 
    puts current_company.inspect 
    end 
end 

のようなコントローラで同じにアクセスしようとするあなたはクラス自体の外からprivateメソッドにアクセスすることはできません、次のエラーに

undefined local variable or method `current_company' for #<Brands::MembersController:0x007f90c34a8138> 

答えて

1

うん、それは私には大丈夫だ。

しかし、1つのことがあります。 Rubyで

def current_company 
    # mind the missing space before question mark 
    current_brands_member? current_brands_member.company : nil 

    # it should be: 
    # current_brands_member ? current_brands_member.company : nil 

    # or even simpler 
    # current_brands_member.try(:company) 
end 
1

を取得しています。 private命令を削除するか、そのメソッドをその外部に移動してください。

+0

'それが唯一の暗黙の' self'ことができるような方法の受信機を指定することができないようにprivate':Brand::AppControllerであなたのコードでは、構文エラーがあります。したがって、 'current_company'への呼び出しはこの文脈では完全にOKです。 –