在gem类中包含模块以向gem类添加方法的正确方法

时间:2016-02-20 15:39:31

标签: ruby-on-rails-4 module initialization rubygems initializer

我正在尝试将模块加载到某些Mailboxer gem类中,以便为这些类添加额外的方法。但是,有时我的尝试会有效,我通常会收到“Undefined method”错误。

我尝试将模块添加到lib目录,然后在config / application.rb文件中发出一个load指令,如下所示:

config.autoload_paths += %W(#{config.root}/lib)

然后使用initializers / mailboxer.rb文件将这些文件包含到各自的类中。

我也尝试过(在intitializer / mailboxer.rb文件中)在类本身上编写class_eval语句,并通过class_eval语句添加方法。

我目前正在将模块放在app / helpers目录中,并将模块名称更改为MailboxerMessagesHelper,MailboxerConversationsHelper等,然后使用initializer / mailboxer.rb文件将它们包括在内:

Mailboxer::Message.include(MailboxerMessagesHelper)

所有这些尝试偶尔都会起作用。我已经看到类似问题的答案,说明这是一个开发环境问题,因为rails在每个请求之间重新加载。但是,我认为问题是我做错了。

1 个答案:

答案 0 :(得分:0)

发现有一件事是导致这个问题的。看来以任何方式修改模块文件都会导致应用程序在重新加载服务器之前根本看不到该模块。

我还在helper目录中创建了一个以Mailboxer命名的目录,我认为这是一个常规。然后我在目录中添加了模块,并使用了命名约定,如:Mailboxer :: ConversationsHelper。似乎到目前为止工作。