【问题标题】:rails 3: in a Class method self.do_something() how do I access an ApplicationHelper method?rails 3:在 Class 方法中 self.do_something() 我如何访问 ApplicationHelper 方法?
【发布时间】:2012-08-23 20:52:47
【问题描述】:

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

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

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

我收到无方法错误。

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

【问题讨论】:

    标签: ruby-on-rails helper


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 目前作为一种解决方法,我只是将类方法转换为实例方法,然后使用虚拟实例调用(以前的类方法)方法,但是是的。
    猜你喜欢
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多