railsでモデルにuuidを持たせる実装について


現在`User`モデルに以下のような処理を入れて`uuid`を実現しています。

[code]

    def before_save_action_name
        uuid = SecureRandom.uuid
        uuid = SecureRandom.uuid while User.exists?(:uuid => uuid)
        self.uuid = uuid
    end
    
[/code]

Rubyの表現力があれば1行で作れそうな気がするのですが(特にuuidに代入している行が2つある部分)、  
どのように実装するのが理想でしょうか。




UUIDは128ビットあり、v4(ランダム)の場合8.2×10^14個生成してようやく衝突確率が0.000001%になります。([参考表](https://ja.wikipedia.org/wiki/%E8%AA%95%E7%94%9F%E6%97%A5%E6%94%BB%E6%92%83#.E6.95.B0.E5.80.A4.E7.9A.84.E8.A7.A3.E8.AA.AC))
そんなレアケースに対して毎回 `exists?` でチェックするのはコストが高い気がします(もちろん計測すべきですが)

DB側でユニーク制約をかけておいて、保存の例外時に `retry` するくらいのほうが見通しがいいんじゃないですかね。

