0

私のモデル には、、Goal、 の 3 つの属性があります。.goal_typegoal_lengthis_complete
Goal belongs_to :user

goal_type"X"、"Y"、または "Z" のみを指定できます

goal_length"short"、"mid"、または "long" のみを指定できます

is_completetrue または false

同じユーザーに属し、is_complete が false に設定されている目標を見ると、指定されたGoal( )が 1 つだけになるようにしたいvalidates_uniqueness_ofgoal_lengthgoal_type

平易な英語の例:

ユーザーがshort Xまだ完了していない目標を持っている場合、新しいshort X目標を作成することはできません。ユーザーが完了した目標を持っている場合、ユーザーはshort X新しいshort X目標を作成できます。

is_completeこの検証は機能しますが、既存の目標の属性が true に設定されているかどうかはチェックされません。is_complete以前の既存のモデルで true の場合、同じ属性を持つ新しい目標を作成しても問題ありません。

validates_uniqueness_of :goal_type, scope: [:goal_length, :user_id]

一致する前の目標で is_complete が true に設定されている場合、検証が無視される条件のチェックを追加するにはどうすればよいですか?

4

1 に答える 1

0

この検証は期待どおりに機能しているようです。

validates_uniqueness_of :goal_type, scope: [:goal_length, :user_id],  conditions: -> { where(is_complete: false) }
于 2013-10-10T23:05:34.267 に答える