In Rails 3 sie Validierung von Active in ActiveModel entkoppelt. Wenn Sie also Rails verwenden oder mindestens das ActiveModel-Juwel in Ihrem Projekt mit Bundler haben oder was auch immer Ihre bevorzugte Methode ist, können Sie ActiveModel :: Validations in jede Klasse aufnehmen. Hier ist eine Beispiel-Klasse (beachten Sie ActiveModel ist erforderlich für mich von Bündler):
class ContactUs::Contact
include ActiveModel::Validations
attr_accessor :email, :message
validates :email, :format => { :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i },
:presence => true
validates :message, :presence => true
def initialize(attributes = {})
attributes.each do |key, value|
self.send("#{key}=", value)
end
@attributes = attributes
end
def read_attribute_for_validation(key)
@attributes[key]
end
def save
if self.valid?
ContactUs::ContactMailer.contact_email(self).deliver
return true
end
return false
end
end
Das Beispiel stammt aus einem Kontaktformular Rails 3 + Motor I ContactUs schrieben Sie den Code auf Github durchsuchen können, wenn Sie in einem anderen laufen Probleme mit Ihrer Implementierung oder verwenden Sie das Gem, wenn es für Ihre Anwendung nicht zu eigen ist.
Ich denke nicht, dass es eine gute Übung ist, ActiveRecord :: Base in diesem Fall zu erweitern. – collimarco
Hmm ... Nun, wenn das der einzige Ort ist, an dem du das tust und du kein separates Modell verwenden willst, ist es wahrscheinlich in Ordnung, wenn du es einfach im Controller machst. Es ist wahrscheinlich keine Best Practice, aber da es sowieso so klein ist, spielt es keine Rolle, wo du den Validierungscode festhältst. Alternativ können Sie sich auch die clientseitige Validierung ansehen. – thebrokencube