我的模型Goal
具有以下三个属性:goal_type
,goal_length
和is_complete
。
Goal
belongs_to :user
。
goal_type
只能是“X”,“Y”或“Z”
goal_length
只能是“短”,“中”或“长”
is_complete
可以是真或假
我希望只有一个Goal
(validates_uniqueness_of
)具有指定的goal_length
和goal_type
,同时查看两个属于同一用户并且拥有的目标is_complete设置为false
简单的英语示例:
如果用户的目标尚未完成short
X
,则无法创建新的short
X
目标。
如果用户已完成short
X
目标,则可以创建新的short
X
目标。
此验证有效,但不会检查现有目标是否将is_complete
属性设置为true。如果以前存在的模型中is_complete
为真,则可以使用相同的属性创建新目标:
validates_uniqueness_of :goal_type, scope: [:goal_length, :user_id]
如果匹配的上一个目标将is_complete设置为true,我将如何添加对忽略验证的条件的检查?
答案 0 :(得分:0)
此验证似乎按预期工作:
validates_uniqueness_of :goal_type, scope: [:goal_length, :user_id], conditions: -> { where(is_complete: false) }