在我的Rails应用程序中,执行一些代码后,我想向用户发送Slack消息以通知他们执行结果。我想为这些消息发送多个过程,总之,我需要在某个地方存储成功/错误的消息模板(它们只是短字符串,例如“嗨,我们成功完成了x!”,但是每个过程都不同。
现在,我在数据库中有一个SlackMessage
模型,您可以从中检索消息内容。但是,我听说最好在yml
文件中管理这样的自定义消息,因为以后更容易添加/编辑消息(例如this,即使这是针对区域设置的)。< / p>
这种情况下的最佳实践是什么?如果不使用数据库,不胜感激,如果您可以提供有关操作方法的指针或链接(就使用yml
文件而言,我唯一能找到的材料是在internationalisation上)。
答案 0 :(得分:1)
为什么不使用Rails中已经存在的I18n
模块?这非常适合存储消息,并且使您能够使用将来可能需要的翻译。
获取消息很简单:
Slack.message(I18n.t(:slack_message, scope:'slack'))
在这种情况下,您需要这样的翻译文件:
en:
slack:
slack_message: This is the message you are going to select.
有关I18n的更多信息:https://guides.rubyonrails.org/i18n.html
答案 1 :(得分:0)
YAML通常比从数据库加载数据要慢得多。此外,即使YAML流中有多个文档,YAML解析器也通常会加载所有数据。
对于运行时间较长且使用大量消息的程序,使用YAML通常不是问题。但是在运行时间短的程序上,加载可能是运行时的重要组成部分,诸如延迟加载和缓存之类的技术可能无济于事。举个例子:前段时间,我为YAML库获得了PR,这延迟了该库中正则表达式的实例化,因为这延迟了某些程序的启动。
如果您有很多消息,它们在从YAML加载后都保留在内存中,这可能是一个问题。使用数据库时,仅检索需要的内容,并依靠数据库有效地执行此操作(缓存等),这种情况更为常见。
如果上述优势和条件不能帮助您做出决定,那么您也可以同时采用这两种方式:通过轻松读取/编辑YAML 以及提高速度,缓存等功能。数据库的“仅”将YAML流转换为DB,无论是在编辑YAML文档之后还是在程序首次使用时(通过查看文件的date-time-stamps)将其显式转换。像postfix
这样的程序就是依靠postmap
来使用的方法(尽管输入是文本,而不是YAML文件)。