这个我觉得很简单。
我有房间,我有客户。每个房间都有很多客户。
在我的房间#1我有4个客户,他们都是女性(client.sex =“F”)。
我想检查这是真是假。我这样做:
Room.first.clients.all? {|c| c.sex == "F" }
然后返回真实!哪个很酷。但我们认为性别可能是“F”,“M”,“A”,“B”,“C”“N”,我想检查一个特定房间的所有客户是否有同性。我怎么能这样做?
Room.first.clients.all? {|c| c.sex == "same as all other clients from this room" }
我当然能做到:
sexbase = Room.first.clients.first.sex
Room.first.clients.all? {|c| c.sex == sexbase }
但有没有更好的方法呢?
答案 0 :(得分:1)
这减少了数据库检索...
array = Room.first.clients.pluck(:sex)
array.count(array[0]) == array.count
答案 1 :(得分:1)
您甚至可以使用单个数据库查询进行检查:
Room.first.clients.distinct.count(:sex) > 1
在这里,您可以计算关系中不同的性别值,如果它超过1,那么您的关系中会有不同的值。
另外,如果您对显示的值感兴趣,可以提取不同值的数组,然后检查它的大小:
values = Room.first.clients.distinct.pluck(:sex) # ['M', 'F'] or ['M'], for example
values.size > 1