2017-04-20 74 views
0

在以下(簡化)Rails代碼塊中。有沒有辦法從class_methods部分調用my_internal_method?我對Ruby/Rails仍然很陌​​生,我閱讀了ActiveSupport::Concern的文檔,但它並沒有什麼意義。Rails ActiveConcern調用私有方法

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 

需要注意的是,我們不得不使用send作爲my_internal_method是私人的,所以不能用明確的接收器訪問(即,你不能做new.my_internal_method