2

мне нужно создать метод, пользовательские проверки под названием findUpperCaseLetter или аналогичныйдобавить пользовательский метод проверки в Ruby On Rails

У меня есть атрибут, называемый пароль, который относится к модели под названием User

Мой метод несколько похож на следующие. Атрибут пароль должен иметь по крайней мере заглавную букву

def findUpperCaseLetter(username) 
    username.each_char do |character| 
      return true if character=~/[[:upper:]]/ 
    end 

    return false 

    end 

Я хочу, чтобы добавить эту проверку в модель User

class User < ActiveRecord::Base 
    attr_accessible :user_name,:email, :password 
    validates_presence_of :user_name,:email, :password 
    validates_uniqueness_of :user_name,:email 
    ???? 
end 

У меня есть уже следующие регулярные expreession

validates_format_of :password, :with => /^[a-z0-9_-]{6,30}$/i, 
    message: "The password format is invalid" 

Как я могу изменить это для добавления следующих

Пароль должен иметь как минимум один percase letter

+0

будет 'проверять: findUpperCaseLetter (имя пользователя)' не работает? – Jadam

ответ

1

Для этого вам не нужна специальная проверка, вы можете использовать регулярное выражение для проверки формата пароля. Добавьте это к вашей модели

validates :password, format: { with: /^(?=.*[A-Z]).+$/, allow_blank: true } 

В Rails, вы можете сделать это с помощью format валидатора, я добавил allow_blank: true, чтобы убедиться, когда поле пустое он выдает только Can't be blank сообщений об ошибке, а не формат сообщения об ошибке проверки достоверности.

Работа этого регулярного выражения заключается в том, чтобы разрешить сохранение пароля в базе данных только в том случае, если он содержит хотя бы одну заглавную букву. Я создал постоянную ссылку на rubule, нажмите здесь http://rubular.com/r/mOpUwmELjD

Надеюсь, это поможет!

+0

Isnt '/ [A-Z] + /' достаточно? – Santhosh

+2

Hiya, это вполне может решить проблему ... но было бы хорошо, если бы вы могли отредактировать свой ответ и дать немного больше объяснений о том, как и почему это работает :) Не забывайте, что на стеке есть кучи новичков переполнения, и они могли бы узнать кое-что из вашего опыта - то, что очевидно для вас, возможно, не так для них. –

+0

@Santosh Да, это тоже работает! – RSB