【发布时间】:2016-05-09 04:07:41
【问题描述】:
我有一个has_many:
Foo 通过 foo_bars 有很多 Bar
我想将一组条形 ID 传递给 Foo 上的某个方法,该方法将删除两个方向上的关系-
有点像
foo.bars.delete([1,3,5,8])
但是,delete 只接受一个模型的 ID。必须有一种方法可以批量执行此操作,而我就是找不到答案。非常感谢任何帮助。
【问题讨论】:
标签: ruby-on-rails activerecord
我有一个has_many:
Foo 通过 foo_bars 有很多 Bar
我想将一组条形 ID 传递给 Foo 上的某个方法,该方法将删除两个方向上的关系-
有点像
foo.bars.delete([1,3,5,8])
但是,delete 只接受一个模型的 ID。必须有一种方法可以批量执行此操作,而我就是找不到答案。非常感谢任何帮助。
【问题讨论】:
标签: ruby-on-rails activerecord
不幸的是,如果要删除 id 数组,Richard Peck 代码将无法正常工作。
您将收到“一些预期的关联,得到了 Fixnum”错误。
此代码将能够完成这项工作:
foo.bars.where(id: array_of_ids).delete_all
但我发现此方法的最佳工作方式是基于 this 答案 cmets 并且与 Richard 答案相关的是使用 splat = * :
foo.bars.delete(*array_of_ids)
【讨论】:
有趣的问题 - 我原本以为你可能会寻找 delete_all 或 destroy_all,但在做了一些测试和查看 Rails docs 之后,它说你只能使用 delete
经过测试,我发现调用delete_all可以去掉所有的采集数据(foo.bars.delete_all):
然后我使用裸delete 方法foo.bars.delete(x,y) 进行了测试。这有效 - :
所以答案是:
foo.bars.delete(1,2,3,4)
【讨论】: