我使用datamapper和dm-contraints設置了我的db模型。我有兩個模型有多對多的關係,但當我試圖摧毀一個模型時,我得到的唯一信息是false
。Datamapper:報告爲什麼我不能銷燬記錄
是否有可能讓datamapper給我更多的反饋一個關係正是導致問題的原因?
我使用datamapper和dm-contraints設置了我的db模型。我有兩個模型有多對多的關係,但當我試圖摧毀一個模型時,我得到的唯一信息是false
。Datamapper:報告爲什麼我不能銷燬記錄
是否有可能讓datamapper給我更多的反饋一個關係正是導致問題的原因?
您可以從
model.destroy
if model
model.errors.each do |error|
p error
end
end
有時,不會告訴你任何東西,雖然,在這種情況下,你可以把一個開始/救援塊的代碼內如得到DataMapper的錯誤信息
begin
model.destroy
rescue Exception => exc
p exc
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。
對於其他數據庫,您可以手動檢查所有的關聯和第一刪除,然後刪除型號
通過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
什麼有關SQL日誌? – phoet