在 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 严重依赖约定。
最佳答案
所以我不太确定你想用你的模块完成什么,但下面是一个让它工作的快速解决方案。
- 将 my_module.rb 从 helpers 中移出并放入 lib/my_module.rb。 helpers 目录用于您在 View 中使用的方法。约定是使用在它们各自的 Controller 或 application_helper.rb 之后命名空间的助手来为您的 View 使用全局方法。不确定这是否是您试图用您的模块完成的,但想把它扔在那里。
- 在 config/initializers/custom_modules.rb 中创建一个初始值设定项(你可以随心所欲)并添加
require 'my_module'
- 将 a_method 更新回
self.a_method
- 您现在可以在您的应用中调用
MyModule.a_method
不要忘记重启服务器以使 lib/my_module.rb 的更改生效。
另外,很多人引用了this post由 Yehuda Katz 编写,作为有关在何处存储应用程序代码的指南。认为这可能是一个有用的引用。
关于ruby-on-rails - 模块的 Rails 未定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27117699/