阻止用户在输入后删除其电子邮件

时间:2016-12-08 12:25:29

标签: ruby-on-rails ruby validation model

我的Rails(使用Rails 5)应用程序目前已设置,以便用户使用其手机号码和密码登录/注册。这是使用Devise设置的,但将authentication_keys更改为mobile_number而不是电子邮件。

有一个表单可以添加其他详细信息,包括电子邮件地址。 目前没有电子邮件验证,因为我不希望它是必须输入的。但是,我希望如果用户确实选择输入电子邮件地址,则无法返回并删除它(仅更新它)。 用户模型中还有这段代码,我认为我可以编辑它以使电子邮件字段不为空时需要电子邮件(但它不起作用):

# app/models/user.rb
def email_required?
  false unless email.present?
end

2 个答案:

答案 0 :(得分:2)

您可以将presence验证条件添加到以前的电子邮件中:

validates :email, presence: true, if: -> { email_was.present? }

答案 1 :(得分:1)

您可以添加自定义验证,该验证将在更新时运行:

exit

用户在编辑页面上点击class User validate :non_removable_email, on: :update private def non_removable_email return if email_was.nil? errors.add(:email, 'Can only be edited') if email.blank? end end 后,就会运行验证。如果从未设置Submit(例如email),则不会发生任何事情。但如果nil在那里但变为空 - 将触发错误。