rails 3:在Class方法中self.do_something()如何访问ApplicationHelper方法?

时间:2012-08-23 20:52:47

标签: ruby-on-rails helper

我的模型Widget.rb有include ApplicationHelper,我的实例方法使用application_helper.rb中定义的任何方法都没有问题

但是,当我尝试在我的任何类方法中使用其中一个辅助方法时,例如

def self.send_broadcast(guid)
   track_guids(guid) # defined in application_helper.rb
end

我收到No Method错误。

是否有允许在类方法中使用ApplicationHelper方法的秘密握手?

2 个答案:

答案 0 :(得分:2)

ApplicationHelper只是一个模块:

module ApplicationHelper
  def track_guids(something)

  end
end

class Widget
  extend ApplicationHelper

  def self.send_broadcast(guid)
    track_guids(guid)
  end
end

现在您应该可以从类方法访问模块方法。我不确定你是否可以扩展并包含相同的模块但是......不确定那是做什么的。

编辑添加:

如果您尝试扩展并将相同的模块包含在课程中,我不确定会发生什么。使用extend,您将获得包含在类级别的模块,include它包含在实例级别。如果你同时做它们,它可能会给你类和实例的方法......或者它可能会死得很厉害。试一试?

答案 1 :(得分:-1)

我不认为你可以访问实例方法,除非self是一个实例。您可以创建Widget的实例并从中调用类方法,或者您可以尝试直接从模块中调用方法。