Вам нужно предложение having
там вместе с предложением where:
ids = [1,3]
Book
.select('books.*') # not sure if this is necessary
.where(authors_books: { author_id: ids })
.joins(:authors_books)
.group('books.id')
.having('count(authors_books) >= ?', ids.size)
То, что происходит, - то, что Вы делаете строку байтов с $ip&$netmask
, и затем попытайтесь рассматривать его как число. Это не собирается работать, как таковое. К чему необходимо питаться inet_ntoa
.
pack("N", unpack("N", $ip&$netmask) + 1)
Я не думаю, что существует более простой способ сделать это.
Путание целых чисел и строк. Возможно, следующий код поможет:
use Socket;
$ip = pack("C4", 192,168,250,66); # why not inet_aton("192.168.250.66")
$netmask = pack("C4", 255,255,255,0);
$ipi = unpack("N", $ip);
$netmaski = unpack("N", $netmask);
$ip1 = pack("N", ($ipi&$netmaski)+1);
print inet_ntoa($ip1), "\n";
Какие выводы:
192.168.250.1