我正在使用 datamapper 和 dm-constraints 设置我的数据库模型。我有两个具有多对多关系的模型,但是当我尝试破坏一个模型时,我得到的唯一消息是false
.
是否有可能让 datamapper 给我更多的反馈,到底是哪种关系导致了问题?
我正在使用 datamapper 和 dm-constraints 设置我的数据库模型。我有两个具有多对多关系的模型,但是当我尝试破坏一个模型时,我得到的唯一消息是false
.
是否有可能让 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
不幸的是,DM 没有提供报告销毁失败原因的方法。
大多数时候,破坏失败是因为它的关联。DM 有一种机制来避免孤立记录。
为了避免这种破坏失败,可以使用 dm-constraints( https://github.com/datamapper/dm-constraints ) 设置真正的数据库级外键引用,默认为保护,但可以设置为级联而是删除。
class List
has n, :todos, :constraint => :destroy (or :destroy!)
end
遗憾的是,目前 dm-constraints 仅支持 PostgreSQL 和 MySQL。
对于其他数据库,可以手动检查所有关联,先删除,再删除模型。</p>
您可以从以下位置获取有关 DataMapper 错误的信息
model.destroy
if model
model.errors.each do |error|
p error
end
end
有时这并不能告诉您任何事情,在这种情况下,您可以将代码放在开始/救援块中,例如
begin
model.destroy
rescue Exception => exc
p exc
end