На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > validates :password, :confirmation => true , rails
      Привет всем.

      Тут с удивлением обнаружил, что валидация на подтверждение происходит только в том случае, если поле с подтверждением не содержит nil (на примере пароля :password_confirmation не должно быть nil), иначе валидация всегда проходи успешно. Сначала думал, что это баг в 3.1.rc4, но покопавшись сначала в коде а потом и в документации понял, что так и задумано.

      Только не понял - почему так задумано?

      Сколько я не видел примеров с валидацией пароле, нигде отдельно не проверялось, что :password_confirmation, :presence => true. Даже в знаминитом туториуле и его переводе про это ни слово не написано. И мне кажется, что это довольно не очевидное поведении.

      Может кто-нибудь знает, зачем так сделано?
        А если подтверждения не будет, у тебя сразу вылетит ошибка, что поле пустое. Проверка на presence прописывается у основного поля password.
          если :password_confirmation == "", а :password == "somepassword", будет ошибка, что нет подтверждения, а если :password_confirmation == nil и :password == "somepassword", то ни каких ошибок не будет. так в доках написано и так оно и есть
            Если оставить поле пустым, то тебе вернется empty string и у тебя вылезет confirmation error. Значения nil у тебя там не будет.
              Цитата Мохнатый @
              Значения nil у тебя там не будет.

              в том-то и дело, что почему-то там nil возвращается, тестировал на 3.1.rc4 с webrick

              Добавлено
              если я ничего не напутал, то для rails request, базовым является Rack::Request, для которого эти params это просто Hash, а если у Hash попросить по несуществующему ключу он вернет nil. как-то так

              Добавлено
              не совсем верно описал, там отдельный метод parameters, но тем не мение он возвращает Hash

              Добавлено
              опять наврал. не Hash, а HashWithIndifferentAccess, но он только позволяет обращаться к значениям как по строкам, так и по символам, то есть, что hash[:a], что hash["a"] все одинаково, но попрежнему возвращает nil если нет конкретного значения

              p.s. может я где-то не там ищу?
                Насчет 3.1 не знаю. Я не перейду до официального релиза.
                Работай на стабильной версии. Все параметры лежат в params, который есть Hash. Я бы рекомендовал тебе проверить твою формочку и названия полей.
                  Мохнатый
                  что-то сейчас решил по тестить, не воспроизводиться, видать какой-то глюк просто был
                  может поля формы просто не предавались? не знаю.

                  Спасибо всем за внимание :) я сам дурак.
                  1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0617 ]   [ 14 queries used ]   [ Generated: 9.07.25, 07:13 GMT ]