【问题标题】:rails_admin handling foreign key failuresrails_admin 处理外键故障
【发布时间】:2015-02-26 20:15:14
【问题描述】:

我有一个使用 rails_admin gem 和 MySql 数据库的 Rails4 应用程序。

我有一个has_many Jobs 的 User 模型。现在,在 rails_admin 仪表板中,User 可以正常删除,除非它有一些 Jobs。在这种情况下,外键失败,因为没有在关系上定义dependent: :destroy这是预期行为

但是,我不想得到“无法删除或更新父行:外键约束失败”错误,而是想显示一条很好的消息:“如果用户有作业,则无法删除用户”。

rails_admin 中是否有一种优雅的方法可以在不进行自定义操作的情况下实现这一目标?

【问题讨论】:

  • 您可以尝试验证,困难的部分是仅针对 Rails 管理员发起的更改运行此验证。这将需要弄乱参数以在 Rails 管理员用户编辑上发送自定义参数,然后在用户上添加 attr_accessor 以匹配此参数。远非优雅。

标签: ruby-on-rails rails-admin


【解决方案1】:

您不能自定义 rails_admin 的 flash 错误消息,但可以导致错误并重定向到 users 的索引页而不是引发异常:

has_many :jobs, dependent: :restrict_with_error

【讨论】:

    【解决方案2】:

    foreign_key: { on_delete: :cascade } 添加到您的迁移中,例如:

    class CreateComment < ActiveRecord::Migration[5.2]
      def change
        create_table :comments do |t|
          t.string :body
          t.references :post, foreign_key: { on_delete: :cascade }
          t.references :user, foreign_key: { on_delete: :cascade }
    
          t.timestamps
        end
      end
    end
    

    【讨论】:

    • 我不想级联删除,我只想显示一个更人性化的错误消息,它不能被删除
    • 可能无法回答 OP 的问题,删除级联提示正是我想要的!
    猜你喜欢
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 2014-07-19
    • 2010-09-22
    • 1970-01-01
    相关资源
    最近更新 更多