我正在使用datamapper和dm-contraints设置我的数据库模型。我有两个有多对多关系的模型但是当我试图销毁一个时,我得到的唯一信息是false
。
是否有可能获取datamapper给我更多反馈,哪种关系正是导致问题?
答案 0 :(得分:9)
使用datamapper 1.2.1:
def why_you_no_destroy? model
preventing = []
model.send(:relationships).each do |relationship|
next unless relationship.respond_to?(:enforce_destroy_constraint)
preventing << relationship.name unless relationship.enforce_destroy_constraint(model)
end
preventing
end
答案 1 :(得分:2)
不幸的是,DM并没有提供一种方法来报告销毁失败的原因。
大多数时候,由于它的关联,破坏失败了。 DM有一种避免孤儿记录的机制。
为了避免这种类型的销毁失败,您可以使用dm-constraints(https://github.com/datamapper/dm-constraints)来设置真正的数据库级外键引用,默认为保护,但可以设置为级联删除。
class List
has n, :todos, :constraint => :destroy (or :destroy!)
end
可悲的是,目前dm-constraints只支持PostgreSQL和MySQL。
对于其他数据库,您可以手动检查所有关联并先删除它们,然后删除模型。
答案 2 :(得分:0)
您可以从
获取有关DataMapper错误的信息model.destroy
if model
model.errors.each do |error|
p error
end
end
有时候这并没有告诉你任何事情,在这种情况下你可以将你的代码放在开始/救援区域内,例如。
begin
model.destroy
rescue Exception => exc
p exc
end