create table foo (id, name, order, ...);
create table foo_bar (id, foo_id, name, value);
foo包含订单栏,其值为(1,2,3,4,5,... 10) 假设foo_bar包含每个foo的多个记录。
如何删除订单值为3..6的foos及其相关记录?
答案 0 :(得分:13)
class Foo < ActiveRecord::Base
has_many :foo_bars, :dependent => :destroy
end
class FooBar < ActiveRecord::Base
belongs_to :foo
end
如果您的关系如上所述,则以下代码将起作用
Foo.delete_all(["id in (?)", [3,4,5,6]])
或者只是
Foo.delete([3,4,5,6])
参考delete
EDITED
从小知道我知道你的问题我觉得你有类似的事情
foo table
id some_column order
1 some_value 3
2 some_value 4
3 some_value 3
4 some_value 2
5 some_value 1
6 some_value 5
7 some_value 6
foo_bar table
id some_column foo_id
1 some_value 2
2 some_value 1
3 some_value 3
4 some_value 2
5 some_value 4
6 some_value 5
7 some_value 6
然后用户关注order
而不是id
Foo.delete_all(["order in (?)", [3,4,5,6]])
答案 1 :(得分:1)
正确答案,销毁(删除)dependens:
正如@Salil所说,如果你的模型有这样的dependent callback
:
has_many :foo_bars, :dependent => :destroy
您要销毁父记录和从属记录的查询应为:
Foo.where(order: [1, 2, 3, 4]).destroy_all
方法where
将获取包含orders
数组的所有记录,并为找到的每条记录调用destroy
方法。
如果您不想执行有关销毁依赖关系的回调,则必须使用delete
或delete_all
。