0

我的模型Goal具有这三个属性:goal_typegoal_lengthis_complete
Goal belongs_to :user.

goal_type只能是“X”、“Y”或“Z”

goal_length只能是“短”、“中”或“长”

is_complete可以是真或假

我希望只有一个Goalvalidates_uniqueness_of)具有指定的goal_length,并且goal_type在查看都属于同一用户并且将 is_complete 设置为 false 的目标时

简单的英文例子:

如果用户有一个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 回答