Rails 3 проверяет правило на основе действий - PullRequest
6 голосов
/ 05 мая 2011

Это кажется простым вопросом, но я не могу найти ответ, кроме написания пользовательских валидаторов. У меня есть этот валидатор

validates :password, :presence => true, :confirmation => true, :length => { :minimum => 5}

Есть еще несколько правил, таких как некоторые регулярные выражения для сложности, но это дает суть.

Проблема в том, что я хочу, чтобы только присутствие применялось при создании, все остальное должно быть при создании и обновлении. Поскольку пользователь может не изменять пароль при обновлении своей информации.

Я пытался разделить правила

validates :password, :presence => true, :on => :create
validates :password, # The rest of the rules

В результате все правила игнорируются для обновления. Есть ли простой способ применить только одно правило для создания, а остальное ко всему?

Ответы [ 2 ]

6 голосов
/ 05 мая 2011

Вы можете попытаться сохранить его в одну строку, но применяя :on => :create только к проверке :presence:

validates :password, :presence => {:on => :create}, :confirmation => true, :length => { :minimum => 5}

Однако я не уверен, что имеет смысл всегда требовать минимальную длину, но не всегда требует присутствия - если вы обновите существующую запись пустым паролем, она все равно не пройдет проверку, так как длина равна 0.

0 голосов
/ 05 мая 2011

Я догадываюсь, что проблема в том, что вызов validate: password не является аддитивным. Можете ли вы переключить проверку присутствия на:

validates_presence_of :password, :on=>:create

А затем сохраните ваши другие проверки, используя проверку. Это работает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...