【发布时间】:2021-08-15 08:40:39
【问题描述】:
我有和管理员模型与设计:
class Administrator < ApplicationRecord
validate :max_num_admins, on: :create
devise :invitable, :database_authenticatable,
:recoverable, :rememberable, :validatable
def max_num_admins
self.errors.add(:base,
I18n.t(
'activerecord.errors.models.administrator.max_reached'
)
) if Administrator.count > 3
end
end
“帐户所有者”可以通过管理仪表板添加管理员,这具有邀请管理员的效果(设计邀请方法邀请!):
def create
resource = resource_class.new(resource_params)
authorize_resource(resource)
if resource.valid?
Administrator.invite!(resource_params)
redirect_to(
[namespace, resource],
notice: translate_with_resource('create.success')
)
else
render :new, locals: {
page: Administrate::Page::Form.new(dashboard, resource)
}
end
end
如您所见,我想检查我的记录是否有效,特别是如果该帐户的管理员记录不超过 3 条。问题是当我在resource(管理员)上调用valid? 时,我总是得到错误,因为在这个阶段,邀请管理员的唯一必要参数是有效的电子邮件,但会触发设计验证,因此我收到一个错误没有设置密码。
什么是保持触发此操作的电子邮件和 max_num_admins 验证而不是来自设计的密码的一种干净的方法?
【问题讨论】:
标签: ruby-on-rails validation devise devise-invitable