1

我有两个模型,Computer并且Ipv6Address

Computer belongs_to Ipv6Address
Ipv6Address has_one Computer

使用 ActiveRecord,我怎样才能找到所有Ipv6Addresses没有Computer关联的列表?

4

3 回答 3

0

ipv6address_id 是计算机表中的外键

id 是 Ipv6Address_id 表的 PK

ids=Computer.select('Ipv6Address_id')
Ipv6Address.select('*').where('id not in (?)',ids)

这可能有效

于 2012-09-17T09:39:40.033 回答
0
Ipv6Address.where('ipv6address_id = ?', nil)
于 2012-09-17T09:51:10.497 回答
0

使用我的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)
于 2015-09-03T14:44:06.337 回答