什么是ActiveRecord :: Relation真的吗?

时间:2018-04-07 09:30:37

标签: ruby-on-rails activerecord

我有一个Deal类(它叫做模型对吗?)就像这样。

class Deal < ApplicationRecord
end

我可以应用ActiveRecord::Relation的方法 交易类 即Deal.destroy_all以及Deal.where(id: 1).destroy_all之类的内容。 我得到Deal.where(id: 1)部分,因为它返回ActiveRecord::Relation。但是Deal.destroy_all呢?我认为这不是ActiveRecord::Relation

我出错了什么? 的修改 任何帮助,将不胜感激。真。您可以将我引导至博客或其他任何内容

1 个答案:

答案 0 :(得分:1)

当我们调用ActiveRecord类方法时,如果它没有加载,Rails会调用:all

这意味着Deal.destroy_allDeal.all.destroy_all相同,Deal.all.class当然是ActiveRecord::Relation

def destroy_all
  records.each(&:destroy).tap { reset }
end

def records
  load
  @records
end

def load(&block)
  exec_queries(&block) unless loaded?

  self
end

def all
  if current_scope
    current_scope.clone
  else
    default_scoped
  end
end