2015-07-02 49 views

回答

9

貌似提交一个新的记录(因为ID是零)。如果它是新的,它还没有到数据库。 count对数据库进行SQL调用以确定行数,因此正确地返回零。由于集合中有一个对象,因此any?返回true。

如果尝试@card.submissions.to_a.size(确保从数据库加载它们,然后检查数组的大小)会发生什么情况。

+0

这是对的,今天我学到了一些东西。作为参考,这里是['count'](http://edgeapi.rubyonrails.org/classes/ActiveRecord/Associations/CollectionProxy.html#method-i- count)方法,['any?'](http: //edgeapi.rubyonrails.org/classes/ActiveRecord/Associations/CollectionProxy.html#method-i-any-3F)方法。 – sjagr

+0

菲利普你是对的。返回1.我在同一页上有一个提交表单(我正在用Submission.new初始化它)。我怎么能解决这个问题? (不使用@ card.submission.count ...我认为这样不雅) – alejoriveralara

+1

'@ card.submissions.size'就足够了 - 关系没有定义大小方法,所以它会将它委托给目标。顺便说一句 - 使用'size'而不是'count'是消除N + 1问题的好方法。 – BroiSatse

0

一个古老的问题,但我想尽管如此。我碰到了类似的问题,结果发现:

@card.submissions.any? = true 
@card.submissions.count = 0 

即使是在我的数据库没有记录,但我已经初始化一个空@card.submission对象,它是@card.submissions阵列英寸

为了减轻这个问题,我试图

@card.submissions.all.any? 

其中重新加载来自数据库的阵列,并返回false

相关问题