删除模型对象数组的最快方法是什么?
What's the fastest way to delete an array of my model objects?
我正在使用 Rails 5. 我想从 table 中删除一堆记录。我有
currencies = CryptoCurrency.order('latest_market_cap_in_usd desc').limit(num_currencies)
current_index_currencies = CryptoIndexCurrency.all.pluck(:crypto_currency_id)
currencies_to_remove = current_index_currencies - currencies
...
currencies_to_remove.each do |currency|
currency.destroy
end
其中 "currencies_to_remove" 应该包含我要删除的所有模型的数组。但是在遍历列表时出现以下错误
2.4.0 :005 > svc.create_index
(0.4ms) SELECT "crypto_index_currencies"."crypto_currency_id" FROM "crypto_index_currencies"
CryptoCurrency Load (1.5ms) SELECT "crypto_currencies".* FROM "crypto_currencies" ORDER BY latest_market_cap_in_usd desc LIMIT [["LIMIT", 12]]
NoMethodError: undefined method `destroy' for 1020:Integer
from /Users/davea/.rvm/gems/ruby-2.4.0/gems/whenever-0.9.7/lib/whenever/numeric.rb:10:in `method_missing'
from /Users/davea/Documents/workspace/cindex/app/services/crypto_index_service.rb:17:in `block in create_index'
from /Users/davea/Documents/workspace/cindex/app/services/crypto_index_service.rb:16:in `each'
from /Users/davea/Documents/workspace/cindex/app/services/crypto_index_service.rb:16:in `create_index'
from (irb):5
from /Users/davea/.rvm/gems/ruby-2.4.0/gems/railties-5.0.4/lib/rails/commands/console.rb:65:in `start'
from /Users/davea/.rvm/gems/ruby-2.4.0/gems/railties-5.0.4/lib/rails/commands/console_helper.rb:9:in `start'
那是因为 currencies_to_remove
包含要删除的模型的索引,而不是模型。因此,destroy
方法未定义。
删除它们的最快方法是 delete
模型上的方法 class:
CryptoCurrency.delete(currencies_to_remove)
但是如果你需要在销毁时调用回调,你可能需要 destroy
方法:
CryptoCurrency.destroy(currencies_to_remove)
注意,如果未找到指定数组中的任何记录,destroy
方法将引发 RecordNotFound
异常
我正在使用 Rails 5. 我想从 table 中删除一堆记录。我有
currencies = CryptoCurrency.order('latest_market_cap_in_usd desc').limit(num_currencies)
current_index_currencies = CryptoIndexCurrency.all.pluck(:crypto_currency_id)
currencies_to_remove = current_index_currencies - currencies
...
currencies_to_remove.each do |currency|
currency.destroy
end
其中 "currencies_to_remove" 应该包含我要删除的所有模型的数组。但是在遍历列表时出现以下错误
2.4.0 :005 > svc.create_index
(0.4ms) SELECT "crypto_index_currencies"."crypto_currency_id" FROM "crypto_index_currencies"
CryptoCurrency Load (1.5ms) SELECT "crypto_currencies".* FROM "crypto_currencies" ORDER BY latest_market_cap_in_usd desc LIMIT [["LIMIT", 12]]
NoMethodError: undefined method `destroy' for 1020:Integer
from /Users/davea/.rvm/gems/ruby-2.4.0/gems/whenever-0.9.7/lib/whenever/numeric.rb:10:in `method_missing'
from /Users/davea/Documents/workspace/cindex/app/services/crypto_index_service.rb:17:in `block in create_index'
from /Users/davea/Documents/workspace/cindex/app/services/crypto_index_service.rb:16:in `each'
from /Users/davea/Documents/workspace/cindex/app/services/crypto_index_service.rb:16:in `create_index'
from (irb):5
from /Users/davea/.rvm/gems/ruby-2.4.0/gems/railties-5.0.4/lib/rails/commands/console.rb:65:in `start'
from /Users/davea/.rvm/gems/ruby-2.4.0/gems/railties-5.0.4/lib/rails/commands/console_helper.rb:9:in `start'
那是因为 currencies_to_remove
包含要删除的模型的索引,而不是模型。因此,destroy
方法未定义。
删除它们的最快方法是 delete
模型上的方法 class:
CryptoCurrency.delete(currencies_to_remove)
但是如果你需要在销毁时调用回调,你可能需要 destroy
方法:
CryptoCurrency.destroy(currencies_to_remove)
注意,如果未找到指定数组中的任何记录,destroy
方法将引发 RecordNotFound
异常