2009-08-03 1 views
6

Wie kann ich eine Validierung in Schienen dynamisch konfigurieren? Zum Beispiel, wenn ichDynamische Validierung von Schienen

validates_length_of :name, within => dynamic 

Die Variable „dynamisch“ wird vom Benutzer eingestellt werden. Beim Speichern sollte die Validierung den Wert der Variablen "dynamic" verwenden, um die interne Konfiguration zu konfigurieren.

+0

Sie sollten sich [definiere dynamische Validierungen mit Procs] (http://stackoverflow.com/a/9961015/1287376) ansehen. –

Antwort

13

Ich glaube nicht validates_length_of unterstützt dynamische Parameter. Sie müssen das Verhalten in einer benutzerdefinierten Überprüfung duplizieren.

# in model 
def validate 
    unless (5..10).member? name.length 
    errors.add :name, "must be within 5 to 10 characters" 
    end 
end 

, die eine statische Reichweite verwendet, aber Sie können Ihre eigene benutzerdefinierte Bereichsvariable leicht benutzen.

def validate 
    unless some_range.member? name.length 
    errors.add :name, "must be within #{some_range.first} to #{some_range.last} characters" 
    end 
end 

Sie mögen meine Railscasts episode on conditional validations und Episode 3 in meinem Everyday Active Record series überprüfen.

+0

Danke für Ihre Antwort. Ich brauche die dynamische Variable auf validates_presence_of wie folgt: validates_presence_of: name,: locales => dynamic_array (: locales kann [: en,: de, ...] dynamisch sein). Die Konfiguration: locales von validates_presence_of kommt mit dem Plugin i18n_multi_locales_validations. – phlegx