0

Моя модель, Goal, имеет следующие три атрибута: goal_type, goal_length и is_complete.
Goalbelongs_to :user.Сложность использования validates_uniqueness_of с определенным условием

goal_type может быть только "X", "Y" или "Z"

goal_length может быть только "короткие", "середина", или "длинные"

is_complete может быть истинным или ложным

Я хочу, чтобы только когда-либо один Goal (validates_uniqueness_of) с указанным goal_length и goal_type при взгляде на тысячелетия, что оба принадлежат одному и тому же пользователю и is_complete набор к ложному

Простые английские примеры:

Если пользователь имеет shortX цели, которую они еще не завершены, они не могут создать новую shortX цели. Если у пользователя shortX гол, который у них есть, то они могут создать новый shortX гол.

Эта проверка работает, но не проверяет, установлены ли для существующих целей свой атрибут is_complete равным true. Если is_complete истинен на ранее существовавшие моделях, это нормально, чтобы создать новую цель с теми же атрибутами:

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

Как добавить проверку на состояние, при котором игнорируется проверка, если соответствие предыдущей цели has_complete установлено в true?

ответ

0

Эта проверка, кажется, работает, как ожидалось:

validates_uniqueness_of :goal_type, scope: [:goal_length, :user_id], conditions: -> { where(is_complete: false) } 
Смежные вопросы