0

Railsアプリ(Postgres)を使用していて、複数のパラメーターに基づいて検証を追加したい。

もしも

 Object.column1 & Object.column2 are NOT unique => reject new entry.

しかし、

Object.column1 IS not unique BUT Object.column2 for duplicate entry is different => accept new entry  

それを行うための最良の方法は何でしょうか?

4

4 に答える 4

0

:scope が問題を解決するかどうかはよくわかりません。代わりに、次のような独自の検証を作成できます

validate :custom_validation

def custom_validation
  self.errors.add(:column, MESSAGE) if YOUR VALIDATION LOGIC fails
end
于 2012-05-01T18:53:37.653 に答える
0

一意性制約にスコープを追加できます。次に、列のセット全体が一意であるかどうかのみを確認します。

validates_uniqueness_of :column1, :scope => :column2

詳細については、ドキュメントを参照してください。

于 2012-05-01T18:58:35.713 に答える
0

だと思います

class User
  validates :first_name, :uniqueness => true, :scope => [:last_name]
end

一意のインデックスを作成することもでき、データベースは一意性を強制します。

add_index :users, [:last_name, :first_name], :unique => true
于 2012-05-01T18:58:56.243 に答える
0

It's probably safer to perform this check at the database level by using a migration to add unique indexes to [column1, column2] and [column2] like this:

add_index :model_name, [:column1, :column2], :unique=>true
add_index :model_name, :column2, :unique=>true
于 2012-05-01T19:00:44.993 に答える