Schienen - Kraft-Feld in Großbuchstaben und validieren eindeutig
Flughäfen haben vier-Buchstaben-ICAO-codes. Von convention, diese werden immer mit Großbuchstaben. Ich erstelle ein Formular für den Empfang von Benutzereingaben, aber auch diese form muss in der Lage sein zu akzeptieren Benutzereingaben in gemischter groß - /Kleinschreibung, und verhindern, dass Sie von der Erstellung der Duplikate.
Den Standard - :uniqueness
groß-und Kleinschreibung, natürlich. Ich fand heraus, wie transformieren die Eingabe des Benutzers in Großbuchstaben, bevor es gespeichert wird, aber das problem ist, dass dies scheint zu sein, post-überprüfung, statt der pre-Validierung.
Zum Beispiel, wenn es bereits eine Airport mit der ICAO von KLAX
ist, kann ein Benutzer geben Sie klax
, wird es überprüft werden, wie einzigartig, und dann umgewandelt in Großbuchstaben und gespeichert, was zu Duplikaten.
Hier ist meine Modell-code zu präsentieren.
class Airport < ActiveRecord::Base
validates :icao, :name, :lat, :lon, :presence => true
validates :icao, :uniqueness => true
before_save :uppercase_icao
def uppercase_icao
icao.upcase!
end
end
Du musst angemeldet sein, um einen Kommentar abzugeben.
Oder ein etwas anderes nehmen: Schreiben Sie ein Trendsetter für die
icao
wandelt nichts um sich geworfen, die es in Großbuchstaben:Dann können Sie reguläre Einzigartigkeit Validierung (sichern Sie Sie mit einem eindeutigen index in Ihrer DB). Vielleicht sogar Dinge ein wenig einfacher für die DB während findet, 'Ursache, die Sie nicht haben, um sorgen über die groß-und Kleinschreibung Vergleiche mehr.
Hoffe, das hilft!
versuchen Sie dies:
Aktualisierte Antwort für Rails 4.
Einfach fest (wie viele Probleme mit Schienen) - wie Danny oben angemerkt, obwohl nicht in seiner eigenen Antwort, damit kann ich nicht akzeptieren :), ändern
before_save
zubefore_validation
behebt es perfekt.