Rails ActiveConcern调用私有方法

时间:2017-04-20 15:11:45

标签: ruby-on-rails ruby activerecord

在以下(简化)Rails代码块中。有没有办法从class_methods部分调用my_internal_method?我还是Ruby / Rails的新手,我阅读了ActiveSupport::Concern的文档,但它没有最有意义。

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

或者,有没有办法在bar中调用foo?这是我开始走这条道路的真正原因。

思想?

1 个答案:

答案 0 :(得分: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