Ruby on Rails: ActiveRecord: Validierung

Aus Wikibooks

Was passiert, wenn sich jemand bei unserem neuen Hyper-Duper-Service registriert und vergisst den Benutzernamen anzugeben? Was, wenn er beim Newsletter in der Emailadresse das '@'-Zeichen vergisst? Oder wenn er bei Anzahl der bestellten Bücher das Wort "viele" reinschreibt?

Wenn in einem Formular offensichtlich Mist steht, muss unsere Applikation irgendwie damit klarkommen. Am besten ist es, wenn die Applikation sofort merkt, was falsch ist und es dem Benutzer zurückmeldet. Dann hat er nämlich die Chance seine Angaben zu korrigieren.

Genau dafür validieren wir Formulareingaben. Und während wir in anderen Frameworks oft auf uns selbst gestellt sind, bietet uns Rails ein Gerüst und viele vorgefertigte Helper für diese Aufgabe.

Validations-Methoden[Bearbeiten]

  • validate - wird bei jeder save-operation ausgeführt
  • validate_on_create - wird nur bei create ausgeführt
  • validate_on_update - wird nur bei update ausgeführt

Das sind Low-Level-Methoden. In der Railsdokumentaion wird empfohlen, soweit möglich die Validation-Helper, unten, diesen Low-Level-Methoden vorzuziehen.

Validations-Helper[Bearbeiten]

Einige Validationen kommen immer wieder vor Dafür bietet Rails fertige Helper. Beispiele:

  • validates_presence_of attr... [options] - stellt sicher dass die Attribute vorhanden und gefüllt sind

Diese Helper werden in die Klassendeklaration eingefügt und dort konfiguriert.

class Glosentry < ActiveRecord::Base
  # keyword darf nicht leer sein.  
  validates_presence_of :keyword, :message => "darf nicht leer sein." 
end

Wie schon gesagt, in der Railsdokumentaion wird empfohlen, soweit möglich diese Validation-Helper einzusetzen und nicht Low-Level-Validatinsmethoden.

validates_acceptance_of[Bearbeiten]

  • validates_acceptance_of attr... [options] - stellt sicher, dass eine Checkbox-Option akzeptiert wurde.

Beispiel:

class Order < ActiveRecord::Base
  # AGB müssen akzeptiert werden  
  validates_acceptance_of :agb, :message => "Bitte akzeptieren Sie unsere AGB um fortzufahren" 
end

Optionen:

  • :accept value - der Wert der Akzeptanz signalisiert (Default ist 1)
  • :allow_nil boolean - wenn true, dann wird nil akzeptiert
  • :message text - default ist "must be accepted"
  • :on - :save, :create or :update

validates_associated[Bearbeiten]

validates_confirmaton_of[Bearbeiten]

validates_each[Bearbeiten]

validates_exclusion_of[Bearbeiten]

validates_format_of[Bearbeiten]

validates_inclusion_of[Bearbeiten]

validates_length_of[Bearbeiten]

Stelt sicher, dass eine Längenbeschränkung eingehalten wird. Es kanm immer nur eine Option geprüft werden.

  class Person < ActiveRecord::Base
    validates_length_of :fax, :in => 7..32, :allow_nil => true
    validates_length_of :phone, :in => 7..32, :allow_blank => true
    validates_length_of :user_name, :within => 6..20, :too_long => "Bitte nehmen sie einen kürzeren Namen", :too_short => "Bitte nehmen sie einen längeren Namen"
  end

Optionen:

  • :minimum - Mindestgröße (des Attributs)
  • :maximum - Maximalgröße
  • :is - Exakte Größe
  • :within - im Größenbereich ..
  • :in - synonym (alias) für :within.
  • :allow_nil - Attribute darf nil sein, dann keine Validierung.
  • :allow_blank - Attribut darf leer sein, dann keine Validierung.
  • :too_long - synonym für :message bei :maximum.
  • :too_short - synonym für :message bei :minimum.
  • :wrong_length - synonym für :message bei :is
  • :message - Die error message
  • :on - wann ist die validation activ? Default: :save, Alternativen: :create und :update.
  • :if, :unless - Konditionale Validierung
  • :tokenizer - Aufsplittung fürs Zählen. Default: buchstabenweise.

validates_numericality_of[Bearbeiten]

  • validates_numericality_of attr... [options] - stellt sicher, dass die Attribute nur Zahlen enthalten

validates_presence_of[Bearbeiten]

validates_size_of[Bearbeiten]

validates_uniqueness_of[Bearbeiten]