1

ステータス列(アクティブまたは削除済み)を持つモデルに取り組んでいます

今、私はこのような一意性の検証を行っています

validates :name, :uniqueness => {:scope => :user_id }

ACTIVE レコードのみに別の「スコープ」を追加したいと思います。以下の検証のように(機能しませんでした)

validates :name, uniqueness: {scope: :user_id }, condition: ['state = ?', 'active']

SQL ステートメントで検証を行う場合、以下のような「何か」になります。

SELECT COUNT(*) FROM table_name WHERE name = '[name]' AND status = 'active'

この問題の解決策の 1 つは、デフォルト スコープを追加することですが、私の場合はそうではありません。デフォルト スコープは必要ありません。

4

2 に答える 2

0

検証を実行しているモデルが の場合、別のスコープとしてactive追加できます。state

validates :name, uniqueness: { scope: [:user_id, :state] }

stateを持つモデルはactiveother に対して一意性をチェックしますactiveが、deletedone はother に対してチェックすることに注意してくださいdeleted

于 2013-09-04T19:31:41.630 に答える