【问题标题】:Activerecord: Remove multiple associations via arrayActiverecord:通过数组删除多个关联
【发布时间】: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


    【解决方案1】:

    不幸的是,如果要删除 id 数组,Richard Peck 代码将无法正常工作。
    您将收到“一些预期的关联,得到了 Fixnum”错误。
    此代码将能够完成这项工作:

    foo.bars.where(id: array_of_ids).delete_all
    

    但我发现此方法的最佳工作方式是基于 this 答案 cmets 并且与 Richard 答案相关的是使用 splat = *

    foo.bars.delete(*array_of_ids)
    

    【讨论】:

      【解决方案2】:

      有趣的问题 - 我原本以为你可能会寻找 delete_alldestroy_all,但在做了一些测试和查看 Rails docs 之后,它说你只能使用 delete


      经过测试,我发现调用delete_all可以去掉所有的采集数据(foo.bars.delete_all):


      然后我使用裸delete 方法foo.bars.delete(x,y) 进行了测试。这有效 - :

      所以答案是:

      foo.bars.delete(1,2,3,4)

      【讨论】:

        猜你喜欢
        • 2020-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多