我有一个简单的主题和消息联系表格,我想验证以防止发送空白电子邮件。
ActionMailer不支持验证。我应该把它放在哪里(即在分开的模型中或直接在控制器中)?
更新:在非ActiveRecord模型中实施验证的最佳方法是什么?
答案 0 :(得分:1)
答案 1 :(得分:1)
在Rails 3中,他们将验证与ActiveRecord分离为ActiveModel。因此,如果您正在使用Rails或者在项目中至少使用了Bundler或者您喜欢的方法中的ActiveModel gem,则可以在任何类中包含ActiveModel :: Validations。这是一个示例类(注意Bundler对我来说需要ActiveModel):
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
示例来自我写的ContactUs联系表格Rails 3+引擎如果您遇到任何其他实施问题,可以浏览Github上的代码,或者如果对您的应用程序不太满意,请使用Gem
答案 2 :(得分:0)
也许这有助于您:http://activeform.rubyforge.org/