gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 06:52:38 25 4
gpt4 key购买 nike

在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com