Ruby on rails object.count返回0。但是,有吗?返回true。什么';发生什么事了?
Ruby on rails object.count返回0。但是,有吗?返回true。什么';发生什么事了?,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,@card.submissions返回以下内容: <ActiveRecord::Associations::CollectionProxy [#<Submission id: nil, user_id: nil, card_id: 7, created_at: nil, updated_at: nil, text: "">]> 看起来提交是一条新记录(因为id为零)。如果是新的,它还没有进入数据库count对数据库进行SQL调用,以确定行数,因此正确地返回零any?返回
@card.submissions
返回以下内容:
<ActiveRecord::Associations::CollectionProxy [#<Submission id: nil, user_id: nil, card_id: 7, created_at: nil, updated_at: nil, text: "">]>
看起来提交是一条新记录(因为id为零)。如果是新的,它还没有进入数据库
count
对数据库进行SQL调用,以确定行数,因此正确地返回零any?
返回true,因为集合中有一个对象
如果您尝试
@card.submissions.to_a.size
(确保从数据库加载它们,然后检查阵列的大小),会发生什么情况?这是一个老问题,但我还是想插嘴。我遇到了一个类似的问题,发现:
@card.submissions.any? = true
@card.submissions.count = 0
尽管我的数据库中没有记录,但我已初始化了@card.submission
数组中的空@card.submissions
对象
为了缓解这个问题,我尝试了
@card.submissions.all.any?
从数据库中重新加载数组,并返回
false
这是正确的,今天我学到了一些东西。作为参考,这里是方法,还有方法。菲利普,你说得对。返回1。我在同一页上有一个提交表单(我正在用submission.new初始化它)。我怎样才能着手解决这个问题呢?(不使用@card.submission.count…我认为这是不雅的)@card.submissions.size
就足够了-relation没有定义size方法,所以它会将其委托给target。顺便说一句-使用size
而不是count
是解决N+1问题的好方法。@Broisasse并不总是这样。有时它会进行SQL调用。ActiveRecord::Associations::CollectionProxy.size表示:返回集合的大小。如果集合尚未加载,它将执行SELECT COUNT(*)查询。否则它会调用collection.size.@alejoriveralara解决什么问题?我不知道你的最终目标是什么(新的vs持久记录,等等)?
@card.submissions.all.any?