2017-07-10 12 views
0

ruby​​ on rails(アクティブレコード)では、 update_counterメソッドを呼び出すだけでカウンタを更新できます。例えば、レールに次のように記述する必要があります。Ecto/Phoenixでアップデートカウンターを実装する最善の方法は何ですか?

# 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 

私は複数の列のカウンタを更新する必要が考慮エリクシル/フェニックスでこれを行う簡単な方法はありますか?あなたはincオプション使用して、このようなもので行くことができます

+0

ご質問の改善点について、お気軽にご連絡ください。ありがとう – punitcse

+0

タグを選択する際には注意してください。 [tag:phoenix]はこの質問とは関係ありません。 – mudasobwa

+0

必ず@mudasobwa。アドバイスをいただきありがとうございます。 – punitcse

答えて

4

Alternativaly:

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

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

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

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

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

関連する問題