我正在写一个gem,它将处理模型的各种通知(短信、手机和浏览器通知)
在应用目录下的rails项目中创建了新文件夹“notifiers”,其中包含以下文件
app/notifiers/user_notifier.rb
class UserNotifier < ApplicationNotifier
def send_reminder
{
type: 'sms',
content: 'hi everyone',
recipients: [12134343,2342322,3434343]
}
end
end
此用户通知程序文件应针对用户模型。表示此方法发送提醒应可用于用户的示例/对象 User.last.send_reminder
所以,问题是
如何使notifiers文件夹的文件特定于模型(user.rb模型文件在notifiers文件夹中有user_notifier.rb文件)
该文件user_notifier.rb方法对用户模型的可用性
这在关注点和名称空间中是可能的,但这会创建混乱的代码
2条答案
按热度按时间c90pui9n1#
如何使notifiers文件夹的文件特定于模型?
app文件夹下的所有代码都是在没有任何配置的情况下加载的。您只需要遵守类的命名约定。在这种情况下
UserNotifier
这个名字对吗app/notifiers/user_notifier.rb
.该文件user_notifier.rb方法如何可用于用户模型?
vxf3dgd42#
多亏了léonard,他发布了解决方案,但在编写gem时,我们需要从gem处理这些配置。因为当有人使用我们的gem时,他/她不必手动在application_record.rb中编写任何与配置相关的逻辑。
发布它只是为了确保将来它可能对其他人有所帮助。
我是如何解决这个问题的(为了将gem附加到一个模型中,我们在希望配置它的模型中添加了act_as_notifier)
在通知程序gem的model_config.rb类中
拥有@model_类并查找相应的通知程序类
在通知程序类中添加attr_访问器,并用model对象初始化它
还定义自定义getter和setters通知程序属性