如何获取未保存的关联记录的数量?

时间:2017-01-27 21:47:47

标签: ruby rails-activerecord

鉴于这些ActiveRecord表定义:

create_table :parents do |t|
end

create_table :children do |t|
  t.references :parent
end

以及相应的型号:

class Parent < ActiveRecord::Base
  has_many :children
end

class Child < ActiveRecord::Base
  belongs_to :parent 
end

当我创建一个具有未保存关联的未保存记录时:

parent = Parent.new
parent.children << Child.new

并询问相关记录的数量:

parent.children.count
=> 0

然后结果是0.我期待1。

我希望计数能够反映未保存和保存的相关记录。我该如何计算?

版本:

  • Rails 4.2.6
  • Ruby 2.3.3

1 个答案:

答案 0 :(得分:4)

您需要使用#size而不是#count。就像你(我,我) 发现,#count忽略内存中的记录。 #size考虑两者 已保存和未保存的记录。

以下是可用于测试其存在或计数的方法 相关记录:

<强>计数

count只考虑数据库中的内容,忽略任何内容 记忆。这每次都会发出一条SQL语句,忽略任何一条 缓存。

<强>大小

要获取已保存和未保存的关联记录的总数,请使用 size。此方法与length的不同之处在于它不强制 要加载到内存中的相关记录。

<强>长度

要将所有关联记录加载到内存中,然后计算所有记录,请使用length。将返回已保存和未保存记录的总数。

<强>存在吗

要查明磁盘上是否有任何记录,请忽略其存在 在内存中,使用exists?。这每次都会发出一条SQL语句, 忽略任何缓存。

参考

a github comment by Carlos Antonio Dasilva

  
      
  • 长度,始终加载对象并使用Array#length

  •   
  • count将始终执行SQL计数

  •   
  • size将检查集合是否已加载,并使用它,   否则会计算。

  •   
     在我认为这种情况下,

尺寸应该能给你正确的值。