Ich habe ein Kommentar-Modell, bei dem ich die maximale Länge eines Kommentars begrenzen möchte:
%Vor%Aus meiner Sicht habe ich ein Eingabefeld deklariert:
%Vor%Das Limit für das Eingabefeld funktioniert wie erwartet, es beschränkt sich auf maximal 500 Zeichen.
Das Modelllimit funktioniert jedoch nicht wie erwartet. Ein Text von 500 Zeichen mit Zeilenumbrüchen gibt einen Validierungsfehler. Das Modell zählt Zeilenumbrüche als zwei Zeichen (und mögliche andere Zeichen auch). Also
Dieser Eingang funktioniert, keine Zeilenumbrüche:
%Vor%Das wird nicht:
%Vor%Gibt es einen einfachen Weg, um validates_length_of Newline (und andere) als ein Zeichen zu zählen?.
=== Ergebnis1 ===
Ich habe die großartigen Antworten von Jon und Dario kombiniert und dies erstellt:
%Vor%Browser senden Zeilenumbrüche aus Textareas als "\ r \ n" Effektiv wird jede neue Zeile als zwei Zeichen gezählt, wenn der Standard-Längenprüfer von Rails verwendet wird.
Also entweder eine Ersetzungsmethode im Controller oder einen Validator mit benutzerdefinierter Länge.
Sie können die Tokenizer-Option des Längen-Validators verwenden, um nur die Wörter und nicht die Zeilenumbrüche zu zählen.
%Vor%Weitere Informationen finden Sie hier: Aktive Datensatzüberprüfungen und Rückrufe
Sie könnten
verwenden %Vor%Auf diese Weise erhalten Sie genau die Zeichenfolge, die Sie erwarten.
Diese Texteingabe:
Dies ist eine Zeichenfolge mit
ein Zeilenumbruch
führt zu dieser Zeichenfolge
"Dies ist eine Zeichenfolge mit einem Zeilenumbruch"
Standardmäßig zählt der rails validator jedes Zeichen und erhält eine Länge von 36
%Vor% Wenn Sie den Tokenizer mit dem regexp /./
verwenden, erhalten Sie ein Ergebnis von 35 wie erwartet (jedes Zeichen + Leerzeichen + 1 Zeilenwechsel), da es \n
stript, aber stattdessen \r
zählt.
Weitere Informationen zur String-Methode scan
finden Sie unter Ссылка
Für weitere Informationen zu regexp könntest du ein wenig mit Ссылка
spielenTags und Links ruby-on-rails