我同时拥有客户模型和设备模型,以及客户模型has_many :devices
和设备模型belongs_to :customer
。我试图在customer.devices.empty?
为true
时显示在客户主页上添加设备的表单,或者只显示客户的设备以及customer.devices.empty
为false
时附带的详细信息
我的问题是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
答案 0 :(得分:12)
使用exists?
代替empty?
:
customer.devices.exists?
不同之处在于exists?
通过查询API检查数据库,而empty?
将关联内容检查为标准Enumerable(可能是脏/修改)。
答案 1 :(得分:1)
根据您的评论exists
和count
将触发DB
查询以检查相关设备。当您使用构建时,它不会保存在DB
中,因此exists
会返回false
而count
会返回0
。当您使用blank
时,它会返回false
,这意味着它有一些devices
customer.devices.blank?