为什么ActiveRecord在从数组中删除对象时会尝试删除对应的行?

时间:2014-01-25 01:07:56

标签: mysql ruby-on-rails activerecord

在一个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行与引发错误的位置挂钩)?

1 个答案:

答案 0 :(得分:1)

如果c_listActiveRecord::Relation而不是Array,则delete将从数据库中删除该值。您可能想要检查c_list.class的值。根据您的目的,您可以使用to_a使用Array或将过滤逻辑转换为一组ActiveRecord::Relation方法。