如何在rails中的实例上运行validates_presence_of?

时间:2012-11-07 20:05:41

标签: ruby-on-rails

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

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,但我在库类中并且不确定如何执行此操作?

2 个答案:

答案 0 :(得分: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将填充任何验证错误。

答案 1 :(得分:0)

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

user.class_eval {validates_presence_of :email }

但验证将在课程中设置,并且将为所有用户启用。