我正在创建一个Tumblr替代方案来学习如何使用Rails。我在认证部分,我决定从头开始。我想允许用户使用他们的用户名或电子邮件登录。用户通过Sessions控制器登录,但我需要验证登录是有效用户名还是有效电子邮件。所以我需要使用User模型验证Sessions控制器中的数据。
我在SO How do I validate a non-model form in Rails 3?上找到了这个答案,但它会强制我复制验证。这是唯一的方法吗,还是有另一种方式更清洁?
答案 0 :(得分:4)
我能想象的最佳选择是创建一个模块,然后将其包含在您的用户模型和您将用于表单的对象中:
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
然后你避免重复验证本身。