即使我的方法 returns 为零,我的 before_create 也不起作用。
my before_create isn't working even though my method returns nil.
这是我的用户 class:
class User < ActiveRecord::Base
has_secure_password
before_save :valid_email?
validates :username, presence: true,
uniqueness: true
validates :first_name, presence: true
enum role: [ :flyer, :admin ]
def valid_email?
email_checker
end
private
def email_checker
self.email.match(/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-.]+$/)
end
end
这是我的测试:
test "if a user has an invalid email, cannot be saved" do
user = build(:user)
user1 = build(:user, email: "here@here@here")
user2 = build(:user, email: "here.here@here")
assert user.save
refute user1.save
refute user2.save
end
如果电子邮件是 here@here@here 或 here.here@here,email_checker 方法会 return nil。那么这是怎么回事?
因为你只是调用了self.email.match
方法。如果你想验证归档你应该使用或创建验证器。
在您的情况下,您可以创建 own custom validator or use e-mail validator from gems (i.e email_validator)。
这是我的用户 class:
class User < ActiveRecord::Base
has_secure_password
before_save :valid_email?
validates :username, presence: true,
uniqueness: true
validates :first_name, presence: true
enum role: [ :flyer, :admin ]
def valid_email?
email_checker
end
private
def email_checker
self.email.match(/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-.]+$/)
end
end
这是我的测试:
test "if a user has an invalid email, cannot be saved" do
user = build(:user)
user1 = build(:user, email: "here@here@here")
user2 = build(:user, email: "here.here@here")
assert user.save
refute user1.save
refute user2.save
end
如果电子邮件是 here@here@here 或 here.here@here,email_checker 方法会 return nil。那么这是怎么回事?
因为你只是调用了self.email.match
方法。如果你想验证归档你应该使用或创建验证器。
在您的情况下,您可以创建 own custom validator or use e-mail validator from gems (i.e email_validator)。