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 に答える