空集合检查返回false而没有条目(Ruby on Rails)

时间:2013-02-06 19:26:32

标签: ruby-on-rails ruby collections

我同时拥有客户模型和设备模型,以及客户模型has_many :devices和设备模型belongs_to :customer。我试图在customer.devices.empty?true时显示在客户主页上添加设备的表单,或者只显示客户的设备以及customer.devices.emptyfalse时附带的详细信息

我的问题是customer.devices.empty?总是返回false。通过一些测试,我发现customer.devices.count将始终显示正确数量的设备,但是在使用Rails控制台时,我只能从customer.devices.empty?获得所需的行为。

我可以简单地检查customer.devices.count的值,但我真的想使用empty?any?检查(我认为)它们是预期的。

问题本身已被描述,但如果你想看代码......

   <% if customer.devices.count == 0 %>
     Count is 0 <!-- This is displayed on the page -->
   <% end %>
   <% if customer.devices.empty? %>
     Customer has no devices! <!-- This is NOT displayed on the page -->
   <% end %>
   <% if customer.devices.any? %>
     Customer has <%= pluralize(customer.devices.count, "device") %>.
     <!-- The line above prints "Customer has 0 devices." -->
   <% end %>

几乎忘记了我的举止 - 提前感谢任何和所有答案。

-MM

2 个答案:

答案 0 :(得分:12)

使用exists?代替empty?

customer.devices.exists?

不同之处在于exists?通过查询API检查数据库,而empty?将关联内容检查为标准Enumerable(可能是脏/修改)。

答案 1 :(得分:1)

根据您的评论existscount将触发DB查询以检查相关设备。当您使用构建时,它不会保存在DB中,因此exists会返回falsecount会返回0。当您使用blank时,它会返回false,这意味着它有一些devices

customer.devices.blank?