我正在通过在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'"
}
]
答案 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类上使用。您可能需要再更改一些代码。