2009-07-09 31 views
0

Ich habe ein einfaches Kontaktformular mit Betreff und Nachricht, die ich überprüfen möchte, um leere E-Mails zu verhindern.Validieren Sie das Kontaktformular

ActionMailer unterstützt keine Validierung. Wo soll ich es hinstellen (d. H. In einem getrennten Modell oder direkt im Controller)?

UPDATE: Was ist der beste Weg, die Validierung in einem nicht ActiveRecord-Modell zu implementieren?

Antwort

1
+0

Ich denke nicht, dass es eine gute Übung ist, ActiveRecord :: Base in diesem Fall zu erweitern. – collimarco

+1

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

1

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.