0

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

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

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

我得到没有方法错误。

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

4

2 回答 2

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它包含在实例级别。如果你两者都做,它可能会给你类和实例的方法……或者它可能会死得很惨。试试看?

于 2012-08-23T21:16:02.377 回答
-1

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

于 2012-08-23T21:03:06.637 回答