Rails:如何使用给定模型手动验证数据?

时间:2011-08-24 13:47:47

标签: ruby-on-rails ruby ruby-on-rails-3 validation

我正在创建一个Tumblr替代方案来学习如何使用Rails。我在认证部分,我决定从头开始。我想允许用户使用他们的用户名或电子邮件登录。用户通过Sessions控制器登录,但我需要验证登录是有效用户名还是有效电子邮件。所以我需要使用User模型验证Sessions控制器中的数据。

我在SO How do I validate a non-model form in Rails 3?上找到了这个答案,但它会强制我复制验证。这是唯一的方法吗,还是有另一种方式更清洁?

1 个答案:

答案 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

然后你避免重复验证本身。