查询CIDR列中未包含IP地址的记录

时间:2019-01-17 16:34:20

标签: ruby-on-rails postgresql activerecord

我有两个现有表: 设备具有列inet:ipaddress 网络有一个列inet:cidr

我需要在Devices表上有一个作用域,该作用域仅返回那些IP地址不包含在任何网络中的设备。cidr

注意:postgres具有INET运算符<<以检查CIDR是否包含ipaddress。但这仅处理一个CIDR,而我却拥有整个表。

我需要这样的东西:

    class Device
      scope :not_in_any_network, -> where("devices.ipaddress NOT IN (?)", Network.select(:cidr))

目标是能够将范围与其他链接起来,例如:

    problems = Device.active.not_in_any_network.other_scopes

1 个答案:

答案 0 :(得分:0)

我可以使用以下代码获得所需的结果:

i <- 1

while(i <= 514) {
   tryCatch({
      url <- deputados$uri[i]
      api_content <- rawToChar(GET(url)$content)
      pessoa_info <- jsonlite::fromJSON(api_content)
      pessoa_foto <- pessoa_info$dados$ultimoStatus$urlFoto
      download.file(pessoa_foto, basename(pessoa_foto), mode = "wb")
      Sys.sleep(0.5)
    }, error = function(e) return(NULL)
   )
   i <- i + 1
}

需要将Network.cidr铸造为TEXT,以避免出现错误“ TypeError:无法引用IPAddr”。

然后我必须将数组转换为inet [],以便<<操作符起作用。