В Rails 3 они отделили валидацию от ActiveRecord в ActiveModel. Поэтому, если вы используете Rails или по крайней мере имеете в своем проекте гем ActiveModel с компоновщиком или любым другим предпочитаемым вами методом, вы можете включить ActiveModel :: Validations в любой класс. Вот пример класса (обратите внимание, ActiveModel требует от меня 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
Пример взят из Contact Form Rails 3+ Engine, который я написал ContactUs , вы можете просмотреть код на Github, если у вас возникнут какие-либо другие проблемы с вашей реализацией, или использовать Gem, если он не слишком самоуверен для ваше заявление.