Ruby on rails 在Rails中,如何删除数组中的所有对象?

Ruby on rails 在Rails中,如何删除数组中的所有对象?,ruby-on-rails,arrays,ruby,ruby-on-rails-5,destroy,Ruby On Rails,Arrays,Ruby,Ruby On Rails 5,Destroy,我正在使用Rails 5,我想删除一个对象数组。在前一篇文章中,我读到“毁灭一切”是真理和光明。我有两个对象数组,我减去它们得到第三个数组 unused_currencies = all_currencies - currencies_from_feed unused_currencies.destroy_all 但是当使用destroy\u all时,我得到了这个错误: NoMethodError: undefined method `destroy_all' for #<Ar

我正在使用Rails 5,我想删除一个对象数组。在前一篇文章中,我读到“毁灭一切”是真理和光明。我有两个对象数组,我减去它们得到第三个数组

  unused_currencies = all_currencies - currencies_from_feed
  unused_currencies.destroy_all
但是当使用
destroy\u all
时,我得到了这个错误:

NoMethodError: undefined method `destroy_all' for #<Array:0x007feea8878770>
NoMethodError:未定义的方法“销毁所有”#

Destroy\u all用于活动记录类型的东西

你到底想干什么?如果您只想删除数组,可以使用

未使用的\u货币=[]


如果您试图销毁数组中的一组活动记录对象,则必须对其进行迭代并逐个删除每个对象

Destroy\u all是用于活动记录类型的东西

你到底想干什么?如果您只想删除数组,可以使用

未使用的\u货币=[]


如果您试图销毁数组中的一组活动记录对象,则必须对其进行迭代并单独删除每个对象

destroy\u all
适用于
ActiveRecord::Relation

如果要清除数组,可以执行以下操作:
unused\u currencies=[]

如果要删除数组中的每个项:
未使用的\u货币。每个(&:销毁)
。这将为每个项目生成一个删除查询

一次删除所有对象(假设它们都属于同一个模型。如果它们不属于同一个模型,这将在你脸上爆炸!)


destroy\u all
适用于
ActiveRecord::Relation

如果要清除数组,可以执行以下操作:
unused\u currencies=[]

如果要删除数组中的每个项:
未使用的\u货币。每个(&:销毁)
。这将为每个项目生成一个删除查询

一次删除所有对象(假设它们都属于同一个模型。如果它们不属于同一个模型,这将在你脸上爆炸!)


此代码将生成一个SQL查询:

unused_currencies = all_currencies - currencies_from_feed
CurrencyModel.delete(unused_currencies)
其中,
CurrencyModel
是您的货币模型

如果需要对模型运行回调,您可能需要使用
destroy

unused_currencies = all_currencies - currencies_from_feed
CurrencyModel.destroy(unused_currencies.map(&:id))

此代码将生成与未使用货币数量成比例的查询数

此代码将生成单个SQL查询:

unused_currencies = all_currencies - currencies_from_feed
CurrencyModel.delete(unused_currencies)
其中,
CurrencyModel
是您的货币模型

如果需要对模型运行回调,您可能需要使用
destroy

unused_currencies = all_currencies - currencies_from_feed
CurrencyModel.destroy(unused_currencies.map(&:id))

此代码将生成与未使用货币数量成比例的查询数

如果使用
map
,则将所有数据加载到内存中。我想你可以这样做:

all_currencies.where.not(id: currencies_from_feed.select(:id)).destroy_all

如果
所有的\u货币
和来自\u提要的
货币
都是ActiveRecord::Relation,这将只生成一个请求sql

如果您使用
映射
,则将所有数据加载到内存中。我想你可以这样做:

all_currencies.where.not(id: currencies_from_feed.select(:id)).destroy_all

如果
所有的\u货币
和来自\u提要的
货币
都是ActiveRecord::Relation,这将只生成一个请求sql

对不起,我不想清除数组,我想从数据库中删除数组中的所有对象。@Dave然后使用第二个,这将创建多少sql语句?是否可以在一条SQL语句中删除所有内容?@Dave是的,如果您将所有ID映射在一起,但数组中的项必须来自同一个模型对不起,我不想清除数组,我想从数据库中删除数组中的所有对象。@Dave然后使用第二条语句这将创建多少SQL语句?是否可以在一条SQL语句中删除所有内容?@Dave Yes,如果您将所有ID映射到一起,但数组中的项目必须来自同一个模型,那么定义来自\u提要的
货币\u
假设
所有\u货币
都是真正的
货币。所有
可能有一个干净的范围,可以用来处理“未使用的\u货币”的集合然后是简单的
Currency。未使用的\u Currency。销毁\u all
,但是如果没有额外的信息,那么很难从\u feed帮助定义
Currency\u,假设
所有的\u Currency
都是真正的
Currency。all
可能有一个干净的范围,可以用来处理“未使用的货币”,然后是简单的
货币。未使用的货币。全部销毁
,但如果没有其他信息,将很难提供帮助