Entschuldigen Sie, wenn dies eine wirklich gemeinsame und / oder lächerliche Frage ist; Ich schwöre, ich habe über die Dokumentation mehrere Male gelesen und alles scheint so konzentriert auf ActiveRecord zu dem Punkt, den sie aus dem Weg der Formulare, die etwas anderes als erstellen oder bearbeiten Modelldaten tun gewandert sind.
Nehmen Sie zum Beispiel ein Formular mit Eingaben zur Steuerung der Extraktion und Anzeige einiger Statistiken. Was bietet mir Rails für die Validierung der Benutzereingaben in diesem Formular, das nicht die save
auf irgendwelchen Aufzeichnungen? Dinge wie:
:email
muss eine E-Mail Adresse sein:num_products
muss eine positive ganze Zahl sein:gender
muss eines von "M" oder "F" sein:temperature
muss zwischen -10 und 120 liegen
usw. usw. (die Art von Dingen, die in den meisten Web-Frameworks standardmäßig enthalten sind)...
Gibt es etwas in Rails für mich diese beliebige Validierung und einige Ansicht-Helfer, um eine Liste der Fehler anzuzeigen, oder ist alles mit ActiveRecord gekoppelt?
Entschuldigung, falls ich dies in der Dokumentation übersehen habe, aber este y este decken es nicht wirklich ab, zumindest soweit meine müden Augen es erkennen können.
kratzt sich am Kopf
Dank der Antwort von Rob habe ich mir folgendes ausgedacht. Ich habe eine Utility-Klasse erstellt (treffend benannt Validator
), die einfach in meine Controller eingebettet ist, für alles, was sie benötigt.
module MyApp
class Validator
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
def initialize(attributes = {})
super
attributes.each { |n, v| send("#{n}=", v) if respond_to?("#{n}=") }
end
end
end
Definieren Sie zum Beispiel im Controller einfach eine kleine Inline-Klasse:
class LoginController < ApplicationController
class AuthenticationValidator < MyApp::Validator
attr_accessor :email
attr_accessor :password
validates_presence_of :email, :message => "E-mail is a required field"
validates_presence_of :password, :message => "Password cannot be blank"
end
def authenticate
if request.post?
@validator = AuthenticationValidator.new(params)
if @validator.valid?
# Do something meaningful
end
end
end
Es erscheint ein wenig unnötig, jeden einzelnen Satz von Validierungsregeln in eine eigene .rb
wenn die Logik mehr auf den Controller ausgerichtet ist, IMHO. Es gibt wahrscheinlich einen prägnanteren Weg, dies zu schreiben, aber ich bin ziemlich neu in Ruby und Rails.