难以将validates_uniqueness_of与特定条件一起使用

时间:2013-10-10 22:49:27

标签: ruby-on-rails ruby ruby-on-rails-4 validates-uniqueness-of

我的模型Goal具有以下三个属性:goal_typegoal_lengthis_complete
Goal belongs_to :user

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

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

is_complete可以是真或假

我希望只有一个Goalvalidates_uniqueness_of)具有指定的goal_lengthgoal_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,我将如何添加对忽略验证的条件的检查?

1 个答案:

答案 0 :(得分:0)

此验证似乎按预期工作:

validates_uniqueness_of :goal_type, scope: [:goal_length, :user_id],  conditions: -> { where(is_complete: false) }