ruby-on-rails - 模块的 Rails 未定义方法

标签 ruby-on-rails ruby

在 Rails 中,如何使用模块中的特定方法。例如,

# ./app/controllers/my_controller.rb
class MyController < ApplicationController
  include MyModule 

  def action
    MyModule.a_method
  end

  private
  def a_method
    ...
  end
end

# ------------------------------------------------ #

# ./app/helpers/my_module.rb
module MyModule 
  def a_method
    ...
  end
end

MyController 包含 MyModule。在 action 中,我想使用 MyModule.a_method(请注意我在 MyController 中也有一个私有(private)的 a_method 并且我不我想用这个。)

我尝试过的事情:

1) 将模块中的方法定义为self.

def self.a_method
end

2) 在 Controller 中使用:: 表示法(MyModule::a_method)

我不断收到的错误是 MyModule:module 的未定义方法:a_method 现在,我为模块方法使用了不同的名称。但我想知道如何使用 Module::Module. 表示法为函数命名空间

[更新 - 2014 年 11 月 24 日] 在代码中添加文件结构,因为 Rails 严重依赖约定。

最佳答案

所以我不太确定你想用你的模块完成什么,但下面是一个让它工作的快速解决方案。

  1. 将 my_module.rb 从 helpers 中移出并放入 lib/my_module.rb。 helpers 目录用于您在 View 中使用的方法。约定是使用在它们各自的 Controller 或 application_helper.rb 之后命名空间的助手来为您的 View 使用全局方法。不确定这是否是您试图用您的模块完成的,但想把它扔在那里。
  2. 在 config/initializers/custom_modules.rb 中创建一个初始值设定项(你可以随心所欲)并添加 require 'my_module'
  3. 将 a_method 更新回 self.a_method
  4. 您现在可以在您的应用中调用 MyModule.a_method

不要忘记重启服务器以使 lib/my_module.rb 的更改生效。

另外,很多人引用了this post由 Yehuda Katz 编写,作为有关在何处存储应用程序代码的指南。认为这可能是一个有用的引用。

关于ruby-on-rails - 模块的 Rails 未定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27117699/

相关文章:

ruby - 检查两个数组是否具有相同的内容(以任何顺序)

arrays - 将数组数组转换为 JSON

ruby-on-rails - Heroku 部署上的 RAILS_MASTER_KEY 错误

html - 根据条件动态填充 div

ruby-on-rails - 如何从 Rails 缓存破坏中免除图像?

ruby-on-rails - 事情在 sidekiq 中排队但没有在 heroku 中执行

ruby-on-rails - Django 中的 Ruby on Rails 模板 "extend"

ruby-on-rails - Rails 响应主体中的奇怪额外字符

ruby-on-rails - Rspec 不改变创建计数

ruby - 如何获取克隆的惰性枚举器的大小