Techioz Blog

Railsで重複レコードを防ぐ正しい方法

概要

私のモデルにはこれがあります:

validates :name, :presence => true, :uniqueness => true

私のコントローラーには次のものがあります:

...
if @location.save
    format.html { redirect_to @location, :notice => 'Location was successfully created.' }
    format.json { render :json => @location, :status => :created }
...

これにより、テーブル内にこの名前のレコードが存在しない場合、レコードが正常に作成されます。 DB 制約に依存するのではなく、重複する可能性のあるレコードを挿入する前にチェックすることをお勧めします。

コントローラーに何かを追加して確認する必要があるでしょうか?これを行う正しい方法は何ですか?

どうもありがとう。

解決策

データベースに一意のインデックスを追加します。そうすることで、何かがモデルの検証をすり抜けた場合 (まれですが技術的には可能です)、データベースに保存するクエリは失敗します。