2017-12-26 11 views
0

ich ein Pseudonym validieren wollen, aber ich habe viel Format wie folgt aus:Rails: Validierung mit viel Format

validates :nickname, presence: true, unniqueness: true, format: { with: /\A[a-zA-Z0-9]+\Z/ }, format: { without: /\s/ }, format: { without: /[!-\/\@\^\~\`\(\)\[\]\>\<\=]/ } 

warning: key :format is duplicated and overwritten on line 38 
warning: key :format is duplicated and overwritten on line 38 

Offensichtlich auf diese Weise down't Arbeit, wie kann ich es lösen? Danke

Antwort

2

Ihre erste Regex umfasst alles:

format: { with: /\A[a-zA-Z0-9]+\Z/ } 

aber Sie wollen wahrscheinlich \z statt \Z auf Fragen mit Hinterzeilenumbrüche zu vermeiden. Alles, was zu /\A[a-zA-Z0-9]+\z/ passt, enthält keine Leerzeichen, so dass der Test /\s/ bereits abgedeckt ist, ähnlich für den Interpunktionstest.

Auch Sie haben uniqueness als unniqueness falsch geschrieben, so dass Sie das auch beheben möchten.

Das würde Sie mit nur verlassen:

validates :nickname, presence: true, uniqueness: true, format: { with: /\A[a-zA-Z0-9]+\Z/ } 

Wenn Sie wirklich mehrere reguläre Ausdrücke hatte dann testen Sie es in einer benutzerdefinierten Methode tun könnte:

validate :nickname_format 

def nickname_format 
    return if(!nickname) # The `presence: true` takes care of complaining about this. 
    if(nickname ~! ...) 
    errors.add(:nickname, 'blah blah') 
    elsif(...) 
    ... 
    end 
end 

, so dass Sie jede überprüfen könnten, Regex individuell.

+0

Vielen Dank für Ihre wertvolle Hilfe! – rod