1

私は2つのモデルを持っています、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

私の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)
于 2015-09-03T14:44:06.337 に答える