0

我想从库类中执行以下操作?

class LibClass
  def create_user(provider)
    user = User.new
    if provider == "facebook"
      user.validates_presence_of :email
    else
      # dont validate presence of email
    end
  end
end

我知道我可以在 User 类中执行 self.validates_presence_of :email ,但我在库类中,不知道该怎么做?

4

2 回答 2

1

在您的User模型中,您可以创建一个访问器来打开或关闭验证。

class User < ActiveRecord::Base
  attr_accessor :validate_email

  def validate_email?; validate_email == true; end

  validates_presenece_of :email, :if => validate_email?
end

您可以通过设置打开验证user.validate_email = true

def create_user(provider)
  user = User.new
  if provider == "facebook"
    user.validate_email = true
  else
    user.validate_email = false
  end
end

要实际运行验证,您可以调用user.valid?,哈希user.errors将填充任何验证错误。

于 2012-11-07T20:26:44.593 回答
0

validates_presence_of 是类方法,而不是实例方法。为了做你想做的事,你必须这样做:

user.class_eval {validates_presence_of :email }

但是验证将在课程上设置,并且将为您的所有用户启用。

于 2012-11-07T20:23:52.350 回答