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.
Je ne pense pas que ce soit une bonne habitude d'exdendre ActiveRecord :: Base dans ce cas. – collimarco
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