2009-07-09 9 views
0

J'ai un simple formulaire de contact avec Sujet et Message que je veux valider pour éviter les e-mails vierges.Valider le formulaire de contact

ActionMailer ne prend pas en charge la validation. Où dois-je le mettre (c'est-à-dire dans un modèle séparé ou directement dans le contrôleur)? MISE À JOUR: quelle est la meilleure façon de mettre en œuvre la validation dans un modèle non ActiveRecord?

Répondre

1
+0

Je ne pense pas que ce soit une bonne habitude d'exdendre ActiveRecord :: Base dans ce cas. – collimarco

+1

Hmm ... Eh bien, si c'est le seul endroit où vous allez faire ça et que vous ne voulez pas utiliser un modèle séparé, ça ira probablement si vous le faites dans le contrôleur. Ce n'est probablement pas la meilleure pratique, mais comme c'est une petite chose de toute façon, le code de validation n'a pas vraiment d'importance. Alternativement, vous pouvez regarder dans la validation côté client. – thebrokencube

1

Dans Rails 3, ils découplés la validation de ActiveRecord en ActiveModel. Donc, si vous utilisez Rails ou avez au moins la gemme ActiveModel dans votre projet avec bundler ou quelle que soit votre méthode préférée, vous pouvez inclure ActiveModel :: Validations dans n'importe quelle classe. Voici un exemple de classe (note ActiveModel me est nécessaire par Bundler):

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 

L'exemple vient d'un formulaire de contact Rails de moteur, j'ai écrit ContactUs vous pouvez parcourir le code sur GitHub si vous avez un tout autre problèmes avec votre mise en œuvre ou utiliser le Gem si ce n'est pas trop opiniâtre pour votre application.

Questions connexes