在一个AR对象类定义中(我不确定它是否相关,但我包含了那些信息),我有一个方法收集其他AR对象的数组并有选择地删除其中的一些一个循环。基本上:
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行与引发错误的位置挂钩)?
答案 0 :(得分:1)
如果c_list
是ActiveRecord::Relation
而不是Array
,则delete
将从数据库中删除该值。您可能想要检查c_list.class
的值。根据您的目的,您可以使用to_a
使用Array
或将过滤逻辑转换为一组ActiveRecord::Relation
方法。