在 Rails 中引入类似触发器的功能的最佳实践

Posted

技术标签:

【中文标题】在 Rails 中引入类似触发器的功能的最佳实践【英文标题】:Best practices to introduce trigger-like functionality in rails 【发布时间】:2022-01-21 20:43:55 【问题描述】:

我想在我的 rails 应用程序中引入触发器。触发我的意思是,如果发生某个事件,则自动执行某些操作。例如,可以定义一个触发器,以便在下订单时发送电子邮件通知。

已经有很多应用程序提供了这个功能,例如查看这篇文章About triggers and how they work。

我的问题是,在 Rails 中实现触发器的最佳做法是什么?内联与异步处理哪个更好?

非常感谢任何形式的帮助。谢谢

【问题讨论】:

【参考方案1】:

您正在寻找的是 Rails 中的 ActiveJob。

当要应用触发器时,您将首先将作业排入队列 -> 然后通过 Worker 中的作业执行此触发器。

例如:假设您想在创建帖子后立即通知管理员,因此您将继续执行以下操作:

class Post < ApplicationRecord
  ...
  after_create :notify_admin
  ...

  private
    def notify_admin
      NotifyAdminJob.perform_later(id)
    end
end

这样,无论您的代码在NotifyAdminJob 中多么复杂或依赖时间,这都不会对您的模型执行(创建/更新)产生任何影响

【讨论】:

谢谢!答案。我知道 Rails 中的活跃工作,我意识到我的问题并不清楚。我实际上是在询问在 Rails 中实现应用程序级触发器的最佳实践。如果有任何有用的文章或与此相关的开源项目。

以上是关于在 Rails 中引入类似触发器的功能的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 上自动保存表单 - 最佳实践

架构最佳实践:Rails 和移动/Web 应用程序

在 Rails 中测试模型的最佳实践是啥?

Rails 4 [最佳实践] 嵌套资源和浅层:true

谷歌应用引擎:隐藏 Rails 密钥的最佳实践?

在 Ruby/Rails 中隔离数据访问层的最佳实践