【问题标题】:What's the fastest way to delete an array of my model objects?删除我的模型对象数组的最快方法是什么?
【发布时间】:2017-08-08 21:22:10
【问题描述】:

我正在使用 Rails 5。我想从表中删除一堆记录。我有

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 $1  [["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'

【问题讨论】:

    标签: ruby-on-rails arrays ruby-on-rails-5 destroy


    【解决方案1】:

    这是因为currencies_to_remove 包含要删除的模型的索引,而不是模型的索引。因此,destroy 方法未定义。

    删除它们的最快方法是模型类上的delete 方法:

    CryptoCurrency.delete(currencies_to_remove)
    

    但如果您需要在销毁时调用回调,您可能需要destroy 方法:

    CryptoCurrency.destroy(currencies_to_remove)
    

    注意,如果在指定数组中没有找到任何记录,destroy 方法将引发RecordNotFound 异常

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-29
      • 2015-07-30
      • 2010-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多