【问题标题】:Proper way to include modules on gem classes to add methods to gem classes在 gem 类中包含模块以向 gem 类添加方法的正确方法
【发布时间】:2016-02-20 15:39:31
【问题描述】:

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

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

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 在每个请求之间重新加载。但是,我认为问题在于我做错了。

【问题讨论】:

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


    【解决方案1】:

    发现一件事是肯定导致此问题的原因。似乎以任何方式修改模块文件都会导致应用程序在重新加载服务器之前根本看不到模块。

    我还在 helpers 目录中创建了一个以 Mailboxer 命名的目录,我认为这是约定俗成的。然后我在目录中添加了模块并使用了命名约定,例如:Mailboxer::ConversationsHelper。到目前为止似乎有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-20
      • 2012-02-10
      • 1970-01-01
      • 2013-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多