5

我有 Customer 模型和 Device 模型,以及 Customer 模型has_many :devices和 Device 模型belongs_to :customer。我正在尝试显示在客户主页上添加设备的表单(如果customer.devices.empty?是)true,或者只是显示客户的设备和随附的详细信息(如果customer.devices.empty是)false

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

我可以简单地检查 的值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 %>

差点忘了我的礼貌——提前感谢所有答案。

-毫米

4

2 回答 2

15

使用exists?代替empty?

customer.devices.exists?

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

于 2013-02-06T19:31:28.600 回答
1

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

customer.devices.blank?
于 2013-02-06T19:38:42.153 回答