IPv6アドレスの検索は、スクリーニング済みIPではあまり簡単にはできません。
IPv4の動作と比較してみてください。
部分的なアドレスしか検出しない場合は、単純な文字列比較も行って、より直感的にすることはできないでしょうか?
discourse(prod)> ScreenedIpAddress.all.filter{ _1.ip_address.to_s.starts_with? '2001' }.pluck(:ip_address)
=>
[#<IPAddr: IPv6:2001:0db8:0666:0000:0000:0000:0000:0000/ffff:ffff:ffff:0000:0000:0000:0000:0000>,
#<IPAddr: IPv6:2001:0db8:0666:0000:0000:0000:1234:5678/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff>,
#<IPAddr: IPv6:2001:0db8:0666:0000:0000:0000:0000:0001/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff>]


