ActiveRecord回调还是MySql触发器?

时间:2017-01-02 08:59:55

标签: mysql ruby-on-rails activerecord triggers

让我们说我们有两种模式:

class Message < ActiveRecord::Base
  belongs_to :user
  has_many :statistics
end

class Statistic < ActiveRecord::Base
  belongs_to :user
  belongs_to :messages
end

Message具有:state属性,必须根据Statistic计数(例如,deliver_at,read_at)进行更新。意味着一旦消息被传递给组中的每个用户,状态就必须相应地更新 在sidekiq作业中更新了Statistics个时间戳,并且查询没有调用回调(update_all),因此我无法挂钩&#39; after_update&#39;回调统计并更新Message.state 我在Statistics表的更新触发器之后尝试使用MySql但是没有运气,因为调用触发器的查询在连接中具有目标表(消息)。 请指教。
希望我足够清楚 谢谢。

2 个答案:

答案 0 :(得分:0)

首先,MySQL触发器无法正常工作似乎不太好。这是最不期望的行为,因为触发器是MySQL数据库的本机,它们应该在您更新表时起作用,不管是Rails,还是查询,还是任何其他实体。您应该查看触发器的代码并对其进行调试,以找出它无法正常工作的原因。

或者,sidekiq作业具有setAdapter,在作业完成其工作时调用。你可以在那里编写代码。但这仍然不能保证您的工作成功或失败。所以你需要照顾它。

答案 1 :(得分:0)

我发现调用触发器的查询中的JOIN是不必要的。删除了JOIN,触发器按预期工作。