| Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум на Исходниках.RU > Ruby > validates :password, :confirmation => true |
| Автор: XandoX 13.07.11, 04:11 |
| Привет всем. Тут с удивлением обнаружил, что валидация на подтверждение происходит только в том случае, если поле с подтверждением не содержит nil (на примере пароля :password_confirmation не должно быть nil), иначе валидация всегда проходи успешно. Сначала думал, что это баг в 3.1.rc4, но покопавшись сначала в коде а потом и в документации понял, что так и задумано. Только не понял - почему так задумано? Сколько я не видел примеров с валидацией пароле, нигде отдельно не проверялось, что :password_confirmation, :presence => true. Даже в знаминитом туториуле и его переводе про это ни слово не написано. И мне кажется, что это довольно не очевидное поведении. Может кто-нибудь знает, зачем так сделано? |
| Автор: Мохнатый 15.07.11, 05:50 |
| А если подтверждения не будет, у тебя сразу вылетит ошибка, что поле пустое. Проверка на presence прописывается у основного поля password. |
| Автор: XandoX 15.07.11, 07:09 |
| если :password_confirmation == "", а :password == "somepassword", будет ошибка, что нет подтверждения, а если :password_confirmation == nil и :password == "somepassword", то ни каких ошибок не будет. так в доках написано и так оно и есть |
| Автор: Мохнатый 15.07.11, 08:07 |
| Если оставить поле пустым, то тебе вернется empty string и у тебя вылезет confirmation error. Значения nil у тебя там не будет. |
| Автор: XandoX 15.07.11, 10:51 |
| в том-то и дело, что почему-то там nil возвращается, тестировал на 3.1.rc4 с webrick Добавлено если я ничего не напутал, то для rails request, базовым является Rack::Request, для которого эти params это просто Hash, а если у Hash попросить по несуществующему ключу он вернет nil. как-то так Добавлено не совсем верно описал, там отдельный метод parameters, но тем не мение он возвращает Hash Добавлено опять наврал. не Hash, а HashWithIndifferentAccess, но он только позволяет обращаться к значениям как по строкам, так и по символам, то есть, что hash[:a], что hash["a"] все одинаково, но попрежнему возвращает nil если нет конкретного значения p.s. может я где-то не там ищу? |
| Автор: Мохнатый 15.07.11, 11:42 |
| Насчет 3.1 не знаю. Я не перейду до официального релиза. Работай на стабильной версии. Все параметры лежат в params, который есть Hash. Я бы рекомендовал тебе проверить твою формочку и названия полей. |
| Автор: XandoX 15.07.11, 11:46 |
| Мохнатый что-то сейчас решил по тестить, не воспроизводиться, видать какой-то глюк просто был может поля формы просто не предавались? не знаю. Спасибо всем за внимание я сам дурак. |