タグ

データベースとRailsに関するtkmkg8mのブックマーク (3)

  • RSpecで悲観的ロックのテストを書く - hitomedia Tech Blog

    こんにちは。花粉症で鼻水が止まらない日々が続いている hilotter です。 同一レコードに対し複数ユーザ(もしくはバッチ処理等)から同時に更新される可能性がある場合、排他制御を行う必要があります。 今回はシンプルなポイント付与機能を例に、悲観的ロックを用いた排他制御のテストを書いてみたいと思います。 シンプルなポイント付与機能仕様 ユーザは他のユーザにポイントを送ることができる 今回のサンプルは以下の環境で確認しました。 Rails 5.1.4 MySQL 5.7.20 MySQLのトランザクション分離レベル REPEATABLE-READ(デフォルト設定) add_pointメソッドの実装 Userモデルにポイントを付与できるadd_pointメソッドを追加します transaction内でlock!を用いて悲観的ロックをかけています。 # app/models/user.rb cl

    RSpecで悲観的ロックのテストを書く - hitomedia Tech Blog
    tkmkg8m
    tkmkg8m 2019/04/02
    スレッドを使って実現
  • ActiveRecord の where.not とド・モルガンの法則 - アジャイルSEの憂鬱

    where.not を使っていて遭遇した問題についてrailsdmの懇親会で話していたら、@kamipo さんから「5.2では少し直っている」という情報を頂いた。 この話をしているときに思ったけど、今の where.not の問題点について知らない人も多そうなので、せっかくなのでブログにまとめてみた。 where.notの問題 where.not のドキュメントにいくつか例がある。 問題は複数の条件を引数で指定した場合。 User.where.not(name: "Jon", role: "admin") # SELECT * FROM users WHERE name != 'Jon' AND role != 'admin' これはド・モルガンの法則でORになりそうなのに、なっていない。 # ド・モルガンの法則 # NOT(A AND B) = NOT(A) OR NOT(B) # つま

    ActiveRecord の where.not とド・モルガンの法則 - アジャイルSEの憂鬱
    tkmkg8m
    tkmkg8m 2018/03/27
    where.notに複数条件渡したことないけど、これ危ないなぁ。暗黙的になってるとバグりそう。
  • Rails tips: トランザクションをネストする(翻訳)|TechRacho by BPS株式会社

    概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: Learn how to use nested transactions in a Ruby on Rails application 原文公開日: 2018/02/02 著者: Paweł Dąbrowsk Ruby on Railsにおけるトランザクションの概要や、アプリに機能追加するときに便利なトランザクションのコールバックについては既にご説明しました。今回はトランザクションのネストについて詳しく見ていきたいと思います。 ネストしたトランザクションを作成する トランザクションは単なるRubyのブロックなので、次のように簡単にネストできます。 Post.transaction do Post.create!(title: 'Playing football') Post.transaction do Post.create!(

    Rails tips: トランザクションをネストする(翻訳)|TechRacho by BPS株式会社
    tkmkg8m
    tkmkg8m 2018/03/19
    トランザクションのネストに意味ある使い方あるの知らなかった……
  • 1