【问题标题】:Using custom module in MailHelper在 MailHelper 中使用自定义模块
【发布时间】:2013-01-03 11:05:26
【问题描述】:

我想在我的邮件助手中访问一个自定义模块,但我不知道如何包含它。

我的自定义模块lib/workday.rb:

module Workday
  def next_workday(date = Date.today)
    ...
  end
  ...
end

我尝试在我的 MailHelper 中使用:

module MailHelper
  include Workday

  def next_workday(date = Date.today)
    Workday.next_workday(date)
  end
  ...
end

当尝试使用助手时,我得到了这个:

undefined method `next_workday' for Workday:Module
/www/xxx/app/helpers/mail_helper.rb:4:in `next_workday'

当手动将模块包含在控制台中时,它可以直接通过帮助程序正常工作:

> include Workday
=> Object
> Workday.next_workday
=> Fri, 04 Jan 2013 
> helpers.next_workday
=> Fri, 04 Jan 2013

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 actionmailer helpers


    【解决方案1】:

    如果您包含Module,这些方法将可以作为实例方法访问。如果尝试直接通过模块访问next_workday方法,则该方法必须定义为“类方法”(带有self.)。

    如果您使用 MailHelper 应该可以工作:

    module MailHelper
      include Workday
    end
    

    没有必要在MailHelper 中定义next_workday 方法,因为它只是委托给Workday#next_workday。如果您将MailHelper 包含在一个类中,则可以使用next_workday 访问该方法

    【讨论】:

    • 非常感谢!它工作完美。我可以看到我没有得到包含模块的概念。现在代码看起来好多了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 2020-09-08
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多