/ / Ecto / Phoenixのアップデートカウンタを実装する最善の方法は何ですか? - ルビー・オン・レール、エリキシル、フェニックス・フレームワーク、エクト

エクト/フェニックスのアップデートカウンターを実装する最善の方法は何ですか? - ルビー・オン・レール、エリキシル、フェニックス・フレームワーク、エクト

Ruby on Rails(アクティブレコード)では、単に呼び出し update_counter 方法。例えば、書いてみる必要があります:

  # For the Post with id of 5, decrement the comment_count by 1, and
# increment the action_count by 1
Post.update_counters 5, :comment_count => -1, :action_count => 1
# Executes the following SQL:
# UPDATE posts
#    SET comment_count = comment_count - 1,
#        action_count = action_count + 1
#  WHERE id = 5

エリクシール/フェニックスで複数の列のカウンターを更新する必要があると考えると、これを行う簡単な方法はありますか?

回答:

回答№1は4

代わりに、あなたはこのようなもので行くことができます inc オプション:

Post
|> where(id: 5)
|> Repo.update_all(inc: [comment_count: -1, action_count: 1])

回答№2については4

私はこの記事をほぼ一年前に書きましたが、それはまだ関連しており、ボーナスとして、 "Railsから来て"という観点から書かれています。

https://medium.com/@lukerollans_17079/counter-caching-in-phoenix-8ac372e5c0c5

あなたの最善の策は、 prepare_changes/2 同じトランザクション内で任意の関数を実行するメカニズムを提供します。これにより、カウンタキャッシングなどの処理を行うことができます。

チェンジセットの生成と同時に計算されるため、コードベースの任意のポイントでカウンタを「特別に」更新する必要はありません。