【问题标题】:Rails: How to validate data manually using a given model?Rails:如何使用给定模型手动验证数据?
【发布时间】:2011-08-24 13:47:46
【问题描述】:
我正在创建一个 Tumblr 替代品来学习如何使用 Rails。我在身份验证部分,我决定从头开始。我想允许用户使用他们的用户名或电子邮件登录。用户通过 Sessions 控制器登录,但我需要验证登录名是有效的用户名还是有效的电子邮件。所以我需要使用 User 模型来验证 Sessions 控制器中的数据。
我在 SO:How do I validate a non-model form in Rails 3? 上找到了这个答案,但它会迫使我重复验证。这是唯一的方法吗,还是有另一种更清洁的方法?
【问题讨论】:
标签:
ruby-on-rails
ruby
ruby-on-rails-3
validation
【解决方案1】:
我能想到的最佳选择是创建一个模块,然后将其包含在您的用户模型和您将用于表单的对象中:
module AuthenticationValidation
def self.included( base )
base.validates :username, :presence => true
base.validates :email, :presence => true
# add your other validations here
end
end
然后在你的模型中包含这个模块:
class User < ActiveRecord::Base
include AuthenticationValidation
end
class LoginForm
include ActiveModel::Validations
include ActiveModel::Conversion
include AuthenticationValidation
attr_accessor :username, :email
end
然后您就避免了重复验证本身。