2013-01-03 68 views
0

我有一个自定义模块,我想在我的邮件助手中访问,但我无法弄清楚如何包含它。在MailHelper中使用自定义模块

我的自定义模块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 

回答

1

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

MailHelper应该工作,如果你使用:

module MailHelper 
    include Workday 
end 

没有必要来定义MailHelpernext_workday方法,因为它只是委托给Workday#next_workday反正。如果将MailHelper包含在课程中,则可以使用next_workday

+0

非常感谢!它工作完美。我可以看到,我没有得到包含模块的概念。代码现在看起来好多了。 –