gpt4 book ai didi

ruby - 当销毁失败时,我可以在事件管理员中有一个闪现消息吗?

转载 作者:数据小太阳 更新时间:2023-10-29 06:56:21 25 4
gpt4 key购买 nike

在我的应用程序中,有些资源无法销毁。所以我这样写了我的模型:

before_destroy :destroy_check
def destroy_check
if some_reason?
errors.add(:base, 'cannot destroy this resource!')
end
errors.blank?
end

然后,当我在 ActiveAdmin 中单击销毁按钮时,没有任何显示:没有错误,没有消息,并且记录没有真正销毁。如何在销毁失败时显示错误消息?

最佳答案

首先使用模型的 before_destroy 回调来检查记录是否可以被销毁(这里如果学生已登录):

class Student < ActiveRecord::Base
before_destroy :before_destroy_check_for_groups

def before_destroy_check_for_groups
if StudentInGroup.exists?(student_id: self.id)
errors.add(:base, I18n.t('app.student_signed_in'))
return false
end
end
end

这很常见也很容易,您可以为每个想要的模型执行此操作。

这是一个技巧。您可以为所有 Active Admin 资源应用通用补丁,以将模型的错误消息作为 ResourceController 的回调传递给用户。就是下面的 check_model_errors 方法。并且此方法必须在每个资源的 ActiveAdmin.register 方法调用执行期间注册为回调(请参阅修补的 run_registration_block)。您可以简单地将下面的代码粘贴到一个新文件(任何名称)到您的应用程序的 config/initializers 文件夹(或在应用程序启动时初始化的任何其他文件夹)。我把它作为 config/initializers/active_admin_patches.rb

class ActiveAdmin::ResourceController
def check_model_errors(object)
return unless object.errors.any?
flash[:error] ||= []
flash[:error].concat(object.errors.full_messages)
end
end
class ActiveAdmin::ResourceDSL
alias_method :old_run_registration_block, :run_registration_block
def run_registration_block(&block)
old_run_registration_block(&block)
instance_exec { after_destroy :check_model_errors }
end
end

关于ruby - 当销毁失败时,我可以在事件管理员中有一个闪现消息吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21352796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com