我有一个Rails 7应用程序,它的模型是AdminUser。可以有多个管理员,任何人都可以删除其中的任何管理员。我该如何设置验证,以便在数据库中的最后一个AdminUser被删除时阻止它删除的可能性?简而言之,我希望总是有一个不可删除的AdminUser。
AdminUser
mqkwyuun1#
首先,我将添加一个AdminUser#destroyable?,以允许在前端检查是否可以销毁以及是否应该在视图中呈现链接。
AdminUser#destroyable?
# in app/models/admin_user.rb def destroyable? AdminUser.count > 1 end
这可以在如下视图中使用:
<%= link_to(admin_user_path ...) if admin_user.destroyable? %>
然后,您可以在有人尝试销毁最后一个管理员用户时引发异常。
# in app/models/admin_user.rb before_destoy :do_not_destroy_last_admin private def do_not_destroy_last_admin raise( ActiveRecord::RecordNotDestroyed, "Last admin cannot be deleted" ) unless destroyable? end
2uluyalo2#
使用类似before_destroy的回调。
before_destroy
class AdminUser < ApplicationRecord before_destroy :check_last ... private def check_last return unless AdminUser.size < 2 raise ActiveRecord::RecordNotDestroyed, 'Can\'t delete last Admin' end end
2条答案
按热度按时间mqkwyuun1#
首先,我将添加一个
AdminUser#destroyable?
,以允许在前端检查是否可以销毁以及是否应该在视图中呈现链接。这可以在如下视图中使用:
然后,您可以在有人尝试销毁最后一个管理员用户时引发异常。
2uluyalo2#
使用类似
before_destroy
的回调。