我正在使用telegram-bot
宝石。它有一个名为Telegram
的模块。我想扩展它以添加一个方法作为我最常见的调用的快捷方式。
我要创建的方法是Telegram.send_message(text)
,使用我的默认配置。
为此,我在telegram.rb
上添加了一个扩展原始模块的app/models/telegram.rb
文件:
module Telegram
def self.send_message(text, options={})
#...
end
end
如果在控制台上运行Telegram.send_message
,它会显示未定义的方法。如果我require 'telegram'
send_message
方法现在有效,(我猜它不会自动加载,因为已经有一个名为Telegram
的模块(宝石上的那个)。现在我想要它应用初始化,
我首先尝试的是在我的application.rb
上添加需求,但它显示cannot load such file
,因为,我认为load_path尚未包含app/models
。
我可以在哪里添加要求?
另一种选择是给它另一个名字,比如TelegramBot
。但我不喜欢Telegram
和TelegramBot
。
其他替代方案是将其添加到initializers
而不是app/models
。但我认为该文件夹更适合设置。
那么,这样做的最佳方法是什么?
答案 0 :(得分:2)
在开发中运行Rails应用程序时,默认情况下会自动为每个请求重新加载一些文件/类,但如果您尝试在自动加载文件夹中的请求之间执行某些操作,则此行为会导致问题(即,In [274]: df
Out[274]:
date
0 02/01/2012 9:30
1 02/01/2012 9:30
2 02/01/2012 9:30
In [275]: df[['date','time']] = df.pop('date').str.split(expand=True)
In [276]: df
Out[276]:
date time
0 02/01/2012 9:30
1 02/01/2012 9:30
2 02/01/2012 9:30
下的任何内容。
在您的情况下,由于app
常量已经定义,因此负责将类名称映射回文件的Rails代码甚至不会被触发,因此该文件不会自动{ {1}} d。
您建议将其移至初始化程序是一个好主意。此行为确实属于初始化程序。
对于它的价值,你可以避免重新打开Telegram
类来通过创建mixin来添加你的方法:
require