Rails: Simple-Form & 设计:自动将用户模型的电子邮件字段标记为表单中的必需字段?

Rails: Simple-Form & Devise: mark email field of user model as required in forms automatically?

我想知道为什么字段 email 在 Simple-Form 中没有被标记为必填字段,因为当提交它为空时会出现验证错误 "can't be blank".

似乎电子邮件字段的验证规则来自 Devise,因此它们可用于验证机制,但不适用于 Simple-Form。这是为什么?

我可以简单地向我的 User 模型中添加另一个 validates :email, presence: true,但这似乎有点过分了。或者我可以将 required: true 添加到 Simple-Form 的 f.input :email 方法中,但这似乎也太过分了。

这是我的 User 模型的相关部分:

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable,
         :confirmable, :lockable, authentication_keys: [:login]

  validates :name, presence: true

我有什么配置吗incorrect/incomplete?

来自简单表格的 README:

For performance reasons, this detection is skipped on validations that make use of conditional options, such as :if and :unless.

您可以看到 Devise 将在 https://github.com/plataformatec/devise/blob/master/lib/devise/models/validatable.rb

中添加带有 :if 的验证
    base.class_eval do
      validates_presence_of   :email, if: :email_required?
      validates_uniqueness_of :email, allow_blank: true, if: :email_changed?
      validates_format_of     :email, with: email_regexp, allow_blank: true, if: :email_changed?

      validates_presence_of     :password, if: :password_required?
      validates_confirmation_of :password, if: :password_required?
      validates_length_of       :password, within: password_length, allow_blank: true
    end

因此您必须在视图中根据需要标记该字段。

如果你提交空白,它会显示要求你填写该字段, 如果您提交了错误的电子邮件,则会要求提供有效的电子邮件。

所以它首先检查是否为空,如果不为空则检查是否有效。

你的表格做得很好。