我有兩個型號,Computer
和Ipv6Address
找到一個HAS_ONE/belongs_to的模型關聯的所有對象,其中不存在關聯
Computer belongs_to Ipv6Address
Ipv6Address has_one Computer
使用ActiveRecord,我怎麼能找到在沒有Computer
與相關聯的所有Ipv6Addresses
列表它?
我有兩個型號,Computer
和Ipv6Address
找到一個HAS_ONE/belongs_to的模型關聯的所有對象,其中不存在關聯
Computer belongs_to Ipv6Address
Ipv6Address has_one Computer
使用ActiveRecord,我怎麼能找到在沒有Computer
與相關聯的所有Ipv6Addresses
列表它?
ipv6address_id是計算機表的外鍵
和
id爲Ipv6Address_id表的PK
ids=Computer.select('Ipv6Address_id')
Ipv6Address.select('*').where('id not in (?)',ids)
這可能工作
雖然不完全是我需要做的,這當然讓我最大的方式在那裏。我的解決方案: 'ids = Computer.select('ipv6_address_id')。其中('ipv6_address_id IS NOT NULL')' 'Ipv6Address.where(「id not IN(?)」,ids.map {| i | i .ipv6_address_id})' – bdx
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)
使用嵌套查詢 –
護理給的是什麼可能看起來爲例喜歡? – bdx
是的,我可以給予前 –