我无法验证邮递员在参数中收到的电子邮件

时间:2019-02-20 06:47:03

标签: ruby-on-rails

我正在通过在API中发送参数(电子邮件)来检查电子邮件的有效性。我在用户模型中定义了验证。

用户控制器:

if User.validates?(:email => params[:email])
  render json: {message: "email"}, status: :ok
else
  render json: {message: "phone"}, status: :bad
end

用户模型:

validates_presence_of :name, :email, :contact, :password_digest
validates :email, uniqueness: true
#encrypt password
has_secure_password

邮递员出现错误:

 "exception": "#<NoMethodError: undefined method `validates?' for #<Class:0x00007fbcdc0b0770>\nDid you mean?  validates\n               validate\n               validates!\n               validators\n               _validators?>",
"traces": {
    "Application Trace": [
        {
            "id": 1,
            "trace": "app/controllers/v1/users_controller.rb:34:in `login'"
        }
    ]

2 个答案:

答案 0 :(得分:3)

class UsersController < ApplicationController
  def foo
    if valid_email?(params[:email])
      render json: {message: "email"}, status: :ok
    else
      render json: {message: "phone"}, status: :bad
    end
  end

  private

  def valid_email?(email)
    VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
    email.present? &&
    (email =~ VALID_EMAIL_REGEX) &&
    User.find_by(email: email).empty?
  end
end

您可以执行以下操作。 但是,我要说的是,即使不是基于ActiveRecord的模型,验证仍然属于模型。请看看如何使用ActiveModel :: Validations:

http://api.rubyonrails.org/classes/ActiveModel/Validations.html http://yehudakatz.com/2010/01/10/activemodel-make-any-ruby-object-feel-like-activerecord/ http://asciicasts.com/episodes/219-active-model

答案 1 :(得分:0)

对于不存在的方法validates?,它会引发无方法错误。 也许您想使用方法valid?,但是,只能在实例上调用valid?,而不能在User类上使用。您可能需要再更改一些代码。

https://guides.rubyonrails.org/active_record_validations.html#valid-questionmark-and-invalid-questionmark