Ruby on rails Rails ActiveRecord:删除带有外键约束的依赖实体时出现非常严重的错误
我在Rails应用程序中有几个带有外键约束的表。例如,每个订单都属于一个客户。订单表上有一个客户id列 由于数据库限制,当我删除已下订单的客户时,MySQL返回错误: Mysql::错误:无法删除或更新 父行:外键约束 失败(Ruby on rails Rails ActiveRecord:删除带有外键约束的依赖实体时出现非常严重的错误,ruby-on-rails,activerecord,error-handling,Ruby On Rails,Activerecord,Error Handling,我在Rails应用程序中有几个带有外键约束的表。例如,每个订单都属于一个客户。订单表上有一个客户id列 由于数据库限制,当我删除已下订单的客户时,MySQL返回错误: Mysql::错误:无法删除或更新 父行:外键约束 失败(订单,约束 orders\u ibfk\u 2外键 (customer\u id)参考customers (id)) 屏幕上会弹出丑陋的错误,还有stacktrace之类的东西 ActiveRecord::语句在DeviceController中无效#销毁 我想知道是否有一
订单
,约束
orders\u ibfk\u 2
外键
(customer\u id
)参考customers
(id
))
屏幕上会弹出丑陋的错误,还有stacktrace之类的东西
ActiveRecord::语句在DeviceController中无效#销毁
我想知道是否有一种优雅的方法来处理这些约束错误,给出一个漂亮的例子,比如“你可以删除这个对象,因为它与X关联”
我该怎么做?在销毁前回调中做出反应:
class Customer < ActiveRecord::Base
before_destroy :no_referenced_orders
has_many :orders
private
def no_referenced_orders
return if orders.empty?
errors.add_to_base("This customer is referenced by order(s): #{orders.map(&:number).to_sentence}")
false # If you return anything else, the callback will not stop the destroy from happening
end
end
class客户
在控制器中:
class CustomersController < ApplicationController
def destroy
@customer = Customer.find(params[:id])
if @customer.destroy then
redirect_to customers_url
else
render :action => :edit
end
end
end
class CustomerController:编辑
结束
结束
结束
不推荐将添加到库中。(最新工作版本v2.3.8)对于Rails 3+,使用errors[:base]