2017-01-02 12 views
0

は、我々は二つのモデルを考えてみましょう:ActiveRecordコールバックまたはMySqlトリガー?

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カウントに基づいて更新する必要があります(i.g. delivered_at、read_at)。つまり、メッセージがグループ内のすべてのユーザーに配信されると、それに応じて状態を更新する必要があります。
Statisticsコールバック(update_all)を呼び出さないクエリでsidekiqジョブでタイムスタンプが更新されたため、統計情報の 'after_update'コールバックにフックできず、Message.stateを更新しました。
統計表の更新トリガーの後にMySqlを使用していましたが、トリガーを呼び出す照会に結合先の表(メッセージ)があるため運がなかった。
お知らせください。
私は十分に明確だったと思っています。
ありがとうございます。

答えて

0

最初は、MySQLのトリガーが機能していないようには思えません。トリガはMySQLデータベースに固有のものであり、Rails、クエリ、または他のエンティティによっても、テーブルの更新時および更新時に動作するはずです。トリガのコードを見てデバッグして、なぜ動作していないのかを調べる必要があります。

また、sidekiqジョブのジョブが完了したときに呼び出されるafter_performがあります。そこにコードを書くことができます。しかし、これはあなたの仕事が成功したか失敗したかを保証するものではありません。だからあなたはそれを世話する必要があります。

+0

ありがとうございます! sidekiqコールバックはプロバージョンのみであると私は思う。 – Anton

0

トリガーを呼び出したクエリのJOINが不要であることがわかりました。 JOINを削除し、トリガーが期待通りに機能しました。

関連する問題