2009-04-26 87 views
4

在Rails 2.2.2(ruby 1.8.7-p72)中,我想評估在實際執行之前銷燬對象的影響。即我希望能夠生成將受到以下影響的所有對象的列表:dependent =>:destroy(通過對象的關聯)。我試圖解決的真正問題是給用戶一個所有將被刪除並讓他們確認操作的列表。評價:dependent =>:destroy

任何人都可以推薦一個很好的方式去解決這個問題嗎?我剛開始研究ActiveRecord :: Associations,但我沒有取得多大進展。

更新:在我的特殊情況下,我有各種級別的對象(A - > B - > C)。

回答

6

這應該幫助你開始......顯然你必須定製它,但這列出了依賴銷燬類BlogEntry所有關聯的名字:

BlogEntry.reflect_on_all_associations.map do |association| 
    if association.options[:dependent] == :destroy 
    # do something here... 
    association.name 
    end 
end.compact 
=> [:taggings, :comments] 
+0

我不知道,謝謝! http://api.rubyonrails.org/classes/ActiveRecord/Reflection/ClassMethods.html – marcgg 2009-04-27 16:02:48

1

只需手動維護一個關聯對象的列表與相關的銷燬(可能是去做的事情),然後有每個的named_scopes拉入所包含的對象來顯示。

0

我想說的是,如前所述,有一種方法可以向用戶顯示受影響的記錄,然後有兩個按鈕/鏈接,一個是刪除,也許有一個用戶確認提醒,詢問他們是否已經檢查其他鏈接是它們將影響的所有記錄的列表。

然後,如果你想確定你也可以做一個軟刪除,將它們標記爲在數據庫中刪除而不是實際刪除它們,這可能會派上用場,我不知道你將如何處理在自動相關性刪除上,可能使用acts_as_paranoid,或者在父模型上使用回調的某種自卷版本。