1

私はRailsにかなり慣れておらず、このテーマに関するいくつかのリソースを読んでいました。そして、私はそれについていくつか質問を受けました。さて、いくつかの属性の一意性を検証するモデルがあるとしましょう。

class User < ActiveRecord::Base
  attr_accesible :name
  validates :name, uniqueness: true
end

したがって、私は今、同じ名前の2つのUserインスタンスをデータベースに作成(またはより正確には保存)できないことを合理的に期待しています。ただし、このリソースは、それがまだ可能であると主張しています!

  • 一部のユーザーはサインインします。
  • [サインイン]ボタンを複数回クリックする
  • リクエスト1はメモリ内にユーザーを作成します(有効)
  • リクエスト2はメモリ内にユーザーを作成します(有効)
  • リクエスト1は正常に保存されました
  • リクエスト2は正常に保存されました

そして後で、このソースはデータベースのインデックスを「名前」列に追加して一意にすることをお勧めします。

しかし、前に述べたように、保存手順で検証が行われる場合、2番目の要求を保存するにはどうすればよいでしょうか。または私は何かを失った?

(私が言及したリソースはRailsチュートリアルです

4

1 に答える 1

3

2番目の要求は最初のレコードがDBに保存される前に発生するため、railsは、保存を許可する名前が指定されたレコードがないことを確認します。そのため、これらのエッジケースを回避するために、データベースフィールドに一意を追加することをお勧めします。

つまり、レコードはメモリ内の検証に合格します。

于 2013-02-18T18:14:05.757 に答える