2017-04-20 14 views
0

次の(簡略化された)Railsコードのブロックにあります。 class_methodsセクションからmy_internal_methodに電話する方法はありますか?私はまだRuby/Railsの新機能ですが、ActiveSupport::Concernのドキュメントを読んでいますが、それは最も理にかなっていません。Rails ActiveConcern callプライベートメソッド

module MyConcern 
    extend ActiveSupport::Concern 

    class_methods do 
    def bar 
     my_internal_method 
    end 
    end 

    def foo 
    my_internal_method 
    end 

    private 

    def my_internal_method 
    end 
end 

または代わりに、foobarを呼び出す方法はありますか?それが私がこの道を歩み始めた真の理由でした。

思考?

+1

'new.send(:my_in ternal_method) 'は最も自然な方法です。 – Ilya

答えて

0

あなたはクラスメソッドからインスタンスメソッドを呼び出すには、インスタンスメソッド

def foo 
    self.class.bar 
    my_internal_method 
end 

からクラスメソッドを呼び出すことができ、あなたは私たちがしなければならなかったインスタンスオブジェクト

def bar 
    new.send(:my_internal_method) 
end 

注意をインスタンス化する必要がありますsendmy_internal_methodとして使用すると、プライベートなので、明示的な受信者ではアクセスできません(new.my_internal_methodはできません)

関連する問題