0

我有

class List < ActiveRecord::Base
  has_many :list_items

class ListItem < ActiveRecord::Base
  belongs_to :list

我想选择某种类型的所有列表,然后删除所有关联的 list_items。我试过地图和其他一些东西,但卡住了。

List.where('list_type_id=4').?

我知道这应该是单行的,但是?

谢谢

** 编辑 #1**

SyntaxError: (irb):94: syntax error, unexpected tCONSTANT, expecting ')'
...ListItem.where('list_id = ?' List.where('list_type_id=4').id)....
...                               ^
(irb):94: syntax error, unexpected ')', expecting $end
...ist.where('list_type_id=4').id).destroy_all
...                               ^
4

3 回答 3

2

如果您想删除列表以及所有关联项目

class List < ActiveRecord::Base
  has_many :list_items, :dependent => :destroy

这会将关联设置为在删除列表时自动销毁所有 list_items。

List.where('list_type_id=4').destroy

如果您只想删除与该列表关联的 ListItems

ListItem.where('list_id = ?', List.find_by_list_type_id(4).id).destroy_all

或者

List.find_by_list_type_id(4).list_items.destroy_all
于 2012-09-16T00:25:05.967 回答
0

试试这个:

class List < ActiveRecord::Base
  has_many :list_items, :dependent => :delete_all

List.where('list_type_id=4').list_items.clear
于 2012-09-16T00:31:26.240 回答
0

为了后代,

List.where('list_type_id=4').map(&:list_items).flatten.each {|li| li.delete }

但是,是的,感觉应该有一种 Railsier 方法来做到这一点。

于 2012-09-16T04:09:06.280 回答