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
因此您必须在视图中根据需要标记该字段。
如果你提交空白,它会显示要求你填写该字段,
如果您提交了错误的电子邮件,则会要求提供有效的电子邮件。
所以它首先检查是否为空,如果不为空则检查是否有效。
你的表格做得很好。
我想知道为什么字段 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
因此您必须在视图中根据需要标记该字段。
如果你提交空白,它会显示要求你填写该字段, 如果您提交了错误的电子邮件,则会要求提供有效的电子邮件。
所以它首先检查是否为空,如果不为空则检查是否有效。
你的表格做得很好。