2014-01-25 17 views
1

內的AR對象類定義(我不知道這是相關的,但我包括在案件的信息是),我有收集其他AR對象的數組和選擇性的方法刪除其中的一些內循環。本質:爲什麼ActiveRecord在從數組中刪除與對象相對應的行?

class SomeApplicationModel < ActiveRecord::Base 
    def user_method 
    c_list = [array of c objects] 
    p_list.each{|p| 
     ... a bunch of logic to determine if c should be deleted 
     c_list.delete(c) 
    } 
    end 
end 

當它擊中c_list.delete(C),我從包括C和P的關係日誌得到一個錯誤:

ActiveRecord::StatementInvalid - Mysql2::Error: Cannot delete or update a parent row: a foreign key constraint fails (`stagingdb/c_p`, CONSTRAINT `c_p_ibfk_1` FOREIGN KEY (`cp_id`) REFERENCES `cs` (`id`)): DELETE FROM `cs` WHERE `cs`.`id` = 147: 

爲什麼試圖刪除記錄在這裏與c相對應的db中(堆棧跟蹤將.delete行作爲拋出錯誤的地方)?

回答

1

如果c_listActiveRecord::Relation而不是一個Array,然後將delete從數據庫中刪除該值。您可能需要檢查c_list.class的值。根據你想要做什麼,你既可以使用to_aArray工作或你的過濾邏輯轉換成一組ActiveRecord::Relation方法。

+0

我不得不鑽研它更多,但它絕對不是一個明確的關係。 _list是某種隱式關係後綴(上面的實際變量名稱是模糊的,但它們確實以_list結尾)? – fields

+0

你可以分享'[數組對象數組]中使用的實際代碼嗎? – cschroed

+0

不是直接。我可以說的是,它的方法的基於返回C.find(list_of_ideas)或C.all,其中C是對應於c中的ActiveRecord類,然後該方法的結果是任一的結果SomeApplicationModel輸出使用.clone()複製到新數組中。克隆的數組就是從中刪除的內容。 – fields