私は2つのモデルを持っています、Computer
そしてIpv6Address
Computer belongs_to Ipv6Address
Ipv6Address has_one Computer
ActiveRecordを使用して、関連付けられていIpv6Addresses
ないすべてのリストを見つけるにはどうすればよいですか?Computer
私は2つのモデルを持っています、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)
私のWhereExists宝石の使用:
# fast
Ipv6Addresses.where_not_exists(:computer)
ベンチマークは、ほとんどの場合、IDの配列をRubyにフェッチしてデータベースに送り返すよりもはるかに高速であることを示しています。
# slow
ids = Computer.distinct(:ipv6_address_id).map(&:ipv6_address_id)
Ipv6Address.where.not(id: ids)