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 に答える