validates :username, exclusion: { in: %w(about account root etc..)
Ich verwende das oben Gesagte, um Benutzern die Verwendung reservierter Benutzernamen zu verbieten, aber sie können sie weiterhin zwischen Unterstrichen verwenden (ich erlaube Unterstriche in Benutzernamen).
Kann ich den reservierten Benutzernamen trotzdem durch Rails validieren lassen, auch wenn er vor oder nach einem Unterstrich steht?
Vielen Dank
3 Antworten
Sie können eine Methode erstellen, um Ihre Validierungen für Sie durchzuführen, und dabei einfachen alten Rubin verwenden. Wie Sie in den Dokumenten hier sehen können
Das würde für Sie ungefähr so aussehen:
validate :my_validation_method
def my_validation_method
errors.add(:username, :exclusion) if some_condition
end
Dies bedeutet, dass das Modell mit my_validation_method
sowie all Ihren normalen anderen Validierungen validiert werden muss. Anschließend fügen Sie das fehlerhafte Feld (in Ihrem Fall: Benutzername) manuell zu den Fehlern des Modells hinzu, sodass die Validierung fehlschlägt.
Beachten Sie auch validate
anstelle von validates
.
Ihre andere Frage ist im Grunde, wie Sie überprüfen können, ob ein eingegebener Wert einige Wörter enthält. Sie könnten dies so machen:
def my_validation_method
forbid = %w(luke darth artoo fry bender)
errors.add(:username, :exclusion) if forbid.find { |w| username.include?(w) }
end
Hier habe ich eine Bedingung zum Hinzufügen des Fehlers hinzugefügt, bei der wir jedes Wort in der verbotenen Liste durchlaufen und prüfen, ob der Benutzername dieses Wort enthält. Beachten Sie, dass "blablaluke" auch scheitern würde! Es ist also nicht ganz das, was Sie wollen. Aber damit können Sie natürlich selbst herumspielen.
Der Normalisierungsgrad, den Sie durchführen (z. B. das Entfernen anderer Zeichen), kann Ihnen mehr Kontrolle geben, z. B. das Verhindern von ad_min
usw.
Update: Sie können Zeichen wie folgt entfernen:
username.tr('-_+$^&', '')
Sie können dieser ersten Zeichenfolge in tr
hinzufügen, was Sie entfernen möchten.
Gemäß den Rails-Dokumenten können Sie auf diese Weise nur überprüfen, ob sich ein Wert in einem Satz von befindet gegebene Werte.
Dieser Helfer überprüft, ob die Werte der Attribute nicht in einem bestimmten Satz enthalten sind.
Ich würde nur eine benutzerdefinierte Validierungsmethode schreiben Methode - Sie können dort tun, was Sie wollen .
Ich würde wahrscheinlich einen Regex verwenden. Wie dieser:
validates_format_of :username, :with => /\A(([ _]*)(?!(about|admin|root|etc)[ _])[^ _]+)+([ _]+|\z)\z/
Neue Fragen
ruby-on-rails
Ruby on Rails ist ein Open Source-Webanwendungsframework mit vollem Stapel, das in Ruby geschrieben wurde. Es folgt dem beliebten MVC-Framework-Modell und ist bekannt für seinen "Convention over Configuration" -Ansatz für die Anwendungsentwicklung.