我有两个模型,Computer
并且Ipv6Address
Computer belongs_to Ipv6Address
Ipv6Address has_one Computer
使用 ActiveRecord,我怎样才能找到所有Ipv6Addresses
没有Computer
关联的列表?
我有两个模型,Computer
并且Ipv6Address
Computer belongs_to Ipv6Address
Ipv6Address has_one Computer
使用 ActiveRecord,我怎样才能找到所有Ipv6Addresses
没有Computer
关联的列表?
ipv6address_id 是计算机表中的外键
和
id 是 Ipv6Address_id 表的 PK
ids=Computer.select('Ipv6Address_id')
Ipv6Address.select('*').where('id not in (?)',ids)
这可能有效
Ipv6Address.where('ipv6address_id = ?', nil)
使用我的Where Exists宝石:
# fast
Ipv6Addresses.where_not_exists(:computer)
基准测试表明,在大多数情况下,它比将 ID 数组获取到 Ruby 并将其发送回数据库要快得多:
# slow
ids = Computer.distinct(:ipv6_address_id).map(&:ipv6_address_id)
Ipv6Address.where.not(id: ids)