0
以下のモデルレベルの一意性制約があり、MySQLレベルに移行する必要があります。同じことをするSQL文は何ですか?条件付き一意性制約Ruby on rails
class Blog < ActiveRecord::Base
validate :uniqness_of_title
def uniqness_of_title
blog = Blog.where("title=? and lock_version<>-1", self.title).last
self.errors.add :base, "Title already exists." if blog
end
end
とそれはタイトルがすでにレコードがlock_versionを持って存在していても、「ブログ」テーブルにエントリを作成できるようにする必要があります= -1。
私はlock_version列も検証する必要があります。ブログのタイトルがlock_version = -1で存在する場合。それはエントリーすることを許すべきです。 –
私はあなたがmysqlの制約(http://stackoverflow.com/questions/987099/unique-constraint-with-conditions-in-mysqlによってバックアップされている意見)でそれを行うことはできないと思います。個人的には、このようなビジネスロジック条件をモデルに残します。 – born4new
@ born4new一意性はデータベースによってのみ保証されます。 3つのRailsアプリケーションサーバーを使用している場合は、3つのモデルレベルのチェックを同時に実行し、そのタイトルを持つ既存のものを見つけられず、すべてが新しいタイトルを作成します。 MySQLでこれを行う最良の方法は別の質問です。 –