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
同じトランザクション内で任意の関数を実行するメカニズムを提供します。これにより、カウンタキャッシングなどの処理を行うことができます。
チェンジセットの生成と同時に計算されるため、コードベースの任意のポイントでカウンタを「特別に」更新する必要はありません。